@@ -242,10 +242,10 @@ export class IgxItemListDirective {
242
242
* @hidden
243
243
*/
244
244
@Directive ( {
245
- selector : '[igxTimeItem]'
245
+ selector : '[igxTimeItem]' ,
246
+ exportAs : 'timeItem'
246
247
} )
247
248
export class IgxTimeItemDirective {
248
-
249
249
@Input ( 'igxTimeItem' )
250
250
public value : string ;
251
251
@@ -271,24 +271,94 @@ export class IgxTimeItemDirective {
271
271
case 'hourList' :
272
272
const hourPart = inputDateParts . find ( element => element . type === 'hour' ) ;
273
273
return DateTimeUtil . getPartValue ( this . timePicker . selectedDate , hourPart , hourPart . format . length ) === this . value ;
274
- case 'minuteList' : {
274
+ case 'minuteList' :
275
275
const minutePart = inputDateParts . find ( element => element . type === 'minute' ) ;
276
276
return DateTimeUtil . getPartValue ( this . timePicker . selectedDate , minutePart , minutePart . format . length ) === this . value ;
277
- }
278
- case 'secondsList' : {
277
+ case 'secondsList' :
279
278
const secondsPart = inputDateParts . find ( element => element . type === 'second' ) ;
280
279
return DateTimeUtil . getPartValue ( this . timePicker . selectedDate , secondsPart , secondsPart . format . length ) === this . value ;
281
- }
282
- case 'ampmList' : {
280
+ case 'ampmList' :
283
281
const ampmPart = inputDateParts . find ( element => element . format === 'tt' ) ;
284
282
return DateTimeUtil . getPartValue ( this . timePicker . selectedDate , ampmPart , ampmPart . format . length ) === this . value ;
285
- }
286
283
}
287
284
}
288
285
286
+ public get minValue ( ) : string {
287
+ const dateType = this . itemList . type ;
288
+ const inputDateParts = DateTimeUtil . parseDateTimeFormat ( this . timePicker . inputFormat ) ;
289
+ switch ( dateType ) {
290
+ case 'hourList' :
291
+ return this . getHourPart ( this . timePicker . minDropdownValue ) ;
292
+ case 'minuteList' :
293
+ if ( this . timePicker . selectedDate . getHours ( ) === this . timePicker . minDropdownValue . getHours ( ) ) {
294
+ const minutePart = inputDateParts . find ( element => element . type === 'minute' ) ;
295
+ return DateTimeUtil . getPartValue ( this . timePicker . minDropdownValue , minutePart , minutePart . format . length ) ;
296
+ }
297
+ return '00' ;
298
+ case 'secondsList' :
299
+ const date = new Date ( this . timePicker . selectedDate ) ;
300
+ const min = new Date ( this . timePicker . minDropdownValue ) ;
301
+ date . setSeconds ( 0 ) ;
302
+ min . setSeconds ( 0 ) ;
303
+ if ( date . getTime ( ) === min . getTime ( ) ) {
304
+ const secondsPart = inputDateParts . find ( element => element . type === 'second' ) ;
305
+ return DateTimeUtil . getPartValue ( this . timePicker . minDropdownValue , secondsPart , secondsPart . format . length ) ;
306
+ }
307
+ return '00' ;
308
+ case 'ampmList' :
309
+ const ampmPart = inputDateParts . find ( element => element . format === 'tt' ) ;
310
+ return DateTimeUtil . getPartValue ( this . timePicker . minDropdownValue , ampmPart , ampmPart . format . length ) ;
311
+ }
312
+ }
313
+
314
+ public get maxValue ( ) : string {
315
+ const dateType = this . itemList . type ;
316
+ const inputDateParts = DateTimeUtil . parseDateTimeFormat ( this . timePicker . inputFormat ) ;
317
+ switch ( dateType ) {
318
+ case 'hourList' :
319
+ return this . getHourPart ( this . timePicker . maxDropdownValue ) ;
320
+ case 'minuteList' :
321
+ if ( this . timePicker . selectedDate . getHours ( ) === this . timePicker . maxDropdownValue . getHours ( ) ) {
322
+ const minutePart = inputDateParts . find ( element => element . type === 'minute' ) ;
323
+ return DateTimeUtil . getPartValue ( this . timePicker . maxDropdownValue , minutePart , minutePart . format . length ) ;
324
+ } else {
325
+ const currentTime = new Date ( this . timePicker . selectedDate ) ;
326
+ const minDelta = this . timePicker . itemsDelta . minute ;
327
+ const remainder = 60 % minDelta ;
328
+ const delta = remainder === 0 ? 60 - minDelta : 60 - remainder ;
329
+ currentTime . setMinutes ( delta ) ;
330
+ const minutePart = inputDateParts . find ( element => element . type === 'minute' ) ;
331
+ return DateTimeUtil . getPartValue ( currentTime , minutePart , minutePart . format . length ) ;
332
+ }
333
+ case 'secondsList' :
334
+ const date = new Date ( this . timePicker . selectedDate ) ;
335
+ const max = new Date ( this . timePicker . maxDropdownValue ) ;
336
+ date . setSeconds ( 0 ) ;
337
+ max . setSeconds ( 0 ) ;
338
+ if ( date . getTime ( ) === max . getTime ( ) ) {
339
+ const secondsPart = inputDateParts . find ( element => element . type === 'second' ) ;
340
+ return DateTimeUtil . getPartValue ( this . timePicker . maxDropdownValue , secondsPart , secondsPart . format . length ) ;
341
+ } else {
342
+ const secDelta = this . timePicker . itemsDelta . second ;
343
+ const remainder = 60 % secDelta ;
344
+ const delta = remainder === 0 ? 60 - secDelta : 60 - remainder ;
345
+ date . setSeconds ( delta ) ;
346
+ const secondsPart = inputDateParts . find ( element => element . type === 'second' ) ;
347
+ return DateTimeUtil . getPartValue ( date , secondsPart , secondsPart . format . length ) ;
348
+ }
349
+ case 'ampmList' :
350
+ const ampmPart = inputDateParts . find ( element => element . format === 'tt' ) ;
351
+ return DateTimeUtil . getPartValue ( this . timePicker . maxDropdownValue , ampmPart , ampmPart . format . length ) ;
352
+ }
353
+ }
354
+
355
+ public get hourValue ( ) : string {
356
+ return this . getHourPart ( this . timePicker . selectedDate ) ;
357
+ }
358
+
289
359
constructor ( @Inject ( IGX_TIME_PICKER_COMPONENT )
290
360
public timePicker : IgxTimePickerComponent ,
291
- private itemList : IgxItemListDirective ) { }
361
+ private itemList : IgxItemListDirective ) { }
292
362
293
363
@HostListener ( 'click' , [ 'value' ] )
294
364
public onClick ( item ) {
@@ -297,6 +367,18 @@ export class IgxTimeItemDirective {
297
367
this . timePicker . onItemClick ( item , dateType ) ;
298
368
}
299
369
}
370
+
371
+ private getHourPart ( date : Date ) : string {
372
+ const inputDateParts = DateTimeUtil . parseDateTimeFormat ( this . timePicker . inputFormat ) ;
373
+ const hourPart = inputDateParts . find ( element => element . type === 'hour' ) ;
374
+ const ampmPart = inputDateParts . find ( element => element . format === 'tt' ) ;
375
+ const hour = DateTimeUtil . getPartValue ( date , hourPart , hourPart . format . length ) ;
376
+ if ( ampmPart ) {
377
+ const ampm = DateTimeUtil . getPartValue ( date , ampmPart , ampmPart . format . length ) ;
378
+ return `${ hour } ${ ampm } ` ;
379
+ }
380
+ return hour ;
381
+ }
300
382
}
301
383
302
384
/**
0 commit comments