@@ -25,8 +25,9 @@ export default class TimePicker extends Component {
2525
2626 /**
2727 * Shows or hides time picker dialog.
28+ * @param {Boolean } set time to default (optional)
2829 */
29- toggle ( flag ) {
30+ toggle ( flag , setTimeToDefault ) {
3031 const root = this . getRoot ( )
3132
3233 root . style [ ( flag ) ? 'display' : 'top' ] = ( flag ) ? 'block' : '25%'
@@ -38,6 +39,7 @@ export default class TimePicker extends Component {
3839 } , ( flag ) ? 20 : 300 )
3940
4041 this . toggleDark ( flag )
42+ if ( flag ) this . reset ( setTimeToDefault )
4143 }
4244
4345 /**
@@ -55,6 +57,60 @@ export default class TimePicker extends Component {
5557 } , ( flag ) ? 20 : 300 )
5658 }
5759
60+ /**
61+ * Resets clocks.
62+ * @param {Boolean } set time to default (optional)
63+ */
64+ reset ( setTimeToDefault = true ) {
65+ this . canSelectClock = true
66+ this . selectClock ( true )
67+
68+ if ( setTimeToDefault ) {
69+ this . selectTime ( true )
70+ this . setTime ( 6 , 30 )
71+ }
72+ }
73+
74+ /**
75+ * Sets time.
76+ * @param {Int } hour
77+ * @param {Int | String } minutes
78+ */
79+ setTime ( hour , minutes ) {
80+ const hoursClock = this . elements . hoursClock
81+ const minutesClock = this . elements . minutesClock
82+
83+ const hoursTickIndex = this . getTickIndex ( hoursClock , hour )
84+ const minutesTickIndex = this . getTickIndex ( minutesClock , minutes )
85+
86+ if ( hoursTickIndex < 0 ) console . log ( 'cant find hour tick index' )
87+ if ( minutesTickIndex < 0 ) console . log ( 'cant find minutes tick index' )
88+ console . log ( hoursTickIndex , minutesTickIndex )
89+
90+ const hoursTick = hoursClock . ticks [ hoursTickIndex ]
91+ const minutesTick = minutesClock . ticks [ minutesTickIndex ]
92+
93+ if ( hoursClock . selectedTick !== hoursTick ) this . selectTick ( hoursTick , hoursClock )
94+ if ( minutesClock . selectedTick !== minutesTick ) this . selectTick ( minutesTick , minutesClock )
95+
96+ this . updateTime ( )
97+ }
98+
99+ /**
100+ * Gets tick index.
101+ * @param {HoursClock | MinutesClock }
102+ * @param {Int | String } hour or minutes
103+ * @return {Int } tick index
104+ */
105+ getTickIndex ( clock , number ) {
106+ for ( var i = 0 ; i < clock . ticks . length ; i ++ ) {
107+ const tickNumber = clock . ticks [ i ] . props . number
108+ if ( tickNumber == number ) return i
109+ }
110+
111+ return - 1
112+ }
113+
58114 /**
59115 * Enables selecting hour or minute.
60116 */
@@ -72,14 +128,14 @@ export default class TimePicker extends Component {
72128 window . removeEventListener ( 'mouseup' , this . disableSelecting )
73129
74130 if ( this . actualClock === this . elements . hoursClock ) {
75- this . selectClock ( this . elements . minutesClock )
131+ this . selectClock ( false )
76132 }
77133 }
78134
79135 /**
80- * Updates hour .
136+ * Updates time .
81137 */
82- updateHour ( ) {
138+ updateTime ( ) {
83139 const hoursClock = this . elements . hoursClock
84140 const minutesClock = this . elements . minutesClock
85141
@@ -91,23 +147,23 @@ export default class TimePicker extends Component {
91147
92148 /**
93149 * Selects clock.
94- * @param {HoursClock | MinutesClock }
150+ * @param {Boolean } select hours clock
95151 */
96- selectClock ( clock ) {
97- if ( this . actualClock !== clock && this . canSelectClock ) {
98- this . actualClock = clock
152+ selectClock ( selectHoursClock ) {
153+ const hoursClock = this . elements . hoursClock
154+ const minutesClock = this . elements . minutesClock
99155
100- const hoursClock = this . elements . hoursClock
101- const minutesClock = this . elements . minutesClock
156+ const clock = ( selectHoursClock ) ? hoursClock : minutesClock
102157
103- const isMinutesClock = ( clock === this . elements . minutesClock )
158+ if ( this . actualClock !== clock && this . canSelectClock ) {
159+ this . actualClock = clock
104160
105- this . toggleClock ( false , ( isMinutesClock ) ? hoursClock : minutesClock )
161+ this . toggleClock ( false , ( selectHoursClock ) ? minutesClock : hoursClock )
106162 this . canSelectClock = false
107163
108164 const self = this
109165 setTimeout ( function ( ) {
110- self . toggleClock ( true , ( isMinutesClock ) ? minutesClock : hoursClock )
166+ self . toggleClock ( true , ( selectHoursClock ) ? hoursClock : minutesClock )
111167
112168 setTimeout ( function ( ) {
113169 self . canSelectClock = true
@@ -117,8 +173,8 @@ export default class TimePicker extends Component {
117173 const hourDisplay = this . elements . hour
118174 const minutesDisplay = this . elements . minutes
119175
120- this . select ( false , ( isMinutesClock ? hourDisplay : minutesDisplay ) )
121- this . select ( true , ( isMinutesClock ? minutesDisplay : hourDisplay ) )
176+ this . select ( false , ( selectHoursClock ? minutesDisplay : hourDisplay ) )
177+ this . select ( true , ( selectHoursClock ? hourDisplay : minutesDisplay ) )
122178 }
123179 }
124180
@@ -157,24 +213,24 @@ export default class TimePicker extends Component {
157213
158214 /**
159215 * Selects time. (AM, PM)
160- * @param {DOMElement }
216+ * @param {Boolean } select AM
161217 */
162- selectTime ( element ) {
218+ selectTime ( selectAM ) {
163219 const am = this . elements . am
164220 const pm = this . elements . pm
165221
166- this . isAM = ( element === am )
222+ this . select ( false , ( selectAM ) ? pm : am )
223+ this . select ( true , ( selectAM ) ? am : pm )
167224
168- this . select ( false , ( this . isAM ) ? pm : am )
169- this . select ( true , ( this . isAM ) ? am : pm )
225+ this . isAM = selectAM
170226 }
171227
172228 /**
173229 * Calculates ticks position.
174- * @param {Int } circle radius (Optional )
175- * @param {Int } circle size (Optional )
176- * @param {Int } tick size (Optional )
177- * @param {Int } ticks count (Optional )
230+ * @param {Int } circle radius (optional )
231+ * @param {Int } circle size (optional )
232+ * @param {Int } tick size (optional )
233+ * @param {Int } ticks count (optional )
178234 * @return {Object } positions
179235 */
180236 calculateTickPosition ( radius = 108 , size = 270 , tickSize = 40 , length = 12 ) {
@@ -197,18 +253,19 @@ export default class TimePicker extends Component {
197253 /**
198254 * Selects tick.
199255 * @param {Tick }
256+ * @param {HoursClock | MinutesClock } clock (optional)
200257 */
201- selectTick ( tick ) {
202- const line = this . actualClock . elements . line
203- const rotate = this . actualClock . getRotate ( tick . props . number )
258+ selectTick ( tick , clock = this . actualClock ) {
259+ const line = clock . elements . line
260+ const rotate = clock . getRotate ( tick . props . number )
204261
205262 line . style . transform = 'translateY(-75%) rotate(' + rotate + 'deg)'
206263
207264 tick . getRoot ( ) . classList . add ( 'selected' )
208265
209- this . deselectTick ( this . actualClock . selectedTick )
210- this . actualClock . selectedTick = tick
211- this . updateHour ( )
266+ this . deselectTick ( clock . selectedTick )
267+ clock . selectedTick = tick
268+ this . updateTime ( )
212269 }
213270
214271 /**
@@ -245,20 +302,20 @@ export default class TimePicker extends Component {
245302 < div className = 'material-time-picker' ref = 'root' >
246303 < div className = 'date-display' >
247304 < div className = 'date-container' >
248- < span className = 'hour selected' ref = 'hour' onClick = { ( ) => this . selectClock ( this . elements . hoursClock ) } >
305+ < span className = 'hour selected' ref = 'hour' onClick = { ( ) => this . selectClock ( true ) } >
249306 6
250307 </ span >
251308 < span className = 'separate' >
252309 :
253310 </ span >
254- < span className = 'minutes' ref = 'minutes' onClick = { ( ) => this . selectClock ( this . elements . minutesClock ) } >
311+ < span className = 'minutes' ref = 'minutes' onClick = { ( ) => this . selectClock ( false ) } >
255312 30
256313 </ span >
257314 < div className = 'am-pm-container' >
258- < div className = 'item selected' ref = 'am' onClick = { ( ) => this . selectTime ( this . elements . am ) } >
315+ < div className = 'item selected' ref = 'am' onClick = { ( ) => this . selectTime ( true ) } >
259316 AM
260317 </ div >
261- < div className = 'item' ref = 'pm' onClick = { ( ) => this . selectTime ( this . elements . pm ) } >
318+ < div className = 'item' ref = 'pm' onClick = { ( ) => this . selectTime ( false ) } >
262319 PM
263320 </ div >
264321 </ div >
@@ -284,13 +341,11 @@ export default class TimePicker extends Component {
284341 if ( props . darkOpacity == null ) props . darkOpacity = 0.7
285342 if ( props . actionButtonRippleStyle == null ) {
286343 props . actionButtonRippleStyle = {
287- backgroundColor : '#26a69a ' ,
344+ backgroundColor : '#3f51b5 ' ,
288345 opacity : 0.3
289346 }
290347 }
291348
292- this . toggle ( true )
293-
294349 this . actualClock = this . elements . hoursClock
295350
296351 const buttons = (
0 commit comments