@@ -2228,6 +2228,79 @@ describe('calendarWeekView component', () => {
2228
2228
} ) ;
2229
2229
} ) ;
2230
2230
2231
+ it ( 'should drag time events to different days and columns while snapping to a grid and excluding weekends with custom hour duration' , ( ) => {
2232
+ const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
2233
+ CalendarWeekViewComponent
2234
+ ) ;
2235
+ fixture . componentInstance . viewDate = new Date ( '2019-03-01' ) ;
2236
+ fixture . componentInstance . excludeDays = [ 0 , 6 ] ;
2237
+ fixture . componentInstance . daysInWeek = 4 ;
2238
+ fixture . componentInstance . events = [
2239
+ {
2240
+ start : moment ( new Date ( '2019-03-01' ) )
2241
+ . startOf ( 'day' )
2242
+ . add ( 4 , 'hours' )
2243
+ . toDate ( ) ,
2244
+ end : moment ( new Date ( '2019-03-01' ) )
2245
+ . startOf ( 'day' )
2246
+ . add ( 18 , 'hours' )
2247
+ . toDate ( ) ,
2248
+ title : 'foo' ,
2249
+ draggable : true
2250
+ }
2251
+ ] ;
2252
+ fixture . componentInstance . hourDuration = 40 ;
2253
+ fixture . componentInstance . ngOnChanges ( {
2254
+ viewDate : { } ,
2255
+ events : { } ,
2256
+ excludeDays : { } ,
2257
+ daysInWeek : { } ,
2258
+ hourColumns : { }
2259
+ } ) ;
2260
+ fixture . detectChanges ( ) ;
2261
+ document . body . appendChild ( fixture . nativeElement ) ;
2262
+ const events = fixture . nativeElement . querySelectorAll (
2263
+ '.cal-event-container'
2264
+ ) ;
2265
+ const dayWidth : number = events [ 0 ] . parentElement . offsetWidth ;
2266
+ const rect1 : ClientRect = events [ 0 ] . getBoundingClientRect ( ) ;
2267
+ let dragEvent : CalendarEventTimesChangedEvent ;
2268
+ fixture . componentInstance . eventTimesChanged . pipe ( take ( 1 ) ) . subscribe ( e => {
2269
+ dragEvent = e ;
2270
+ } ) ;
2271
+ triggerDomEvent ( 'mousedown' , events [ 0 ] , {
2272
+ clientX : rect1 . right ,
2273
+ clientY : rect1 . bottom ,
2274
+ button : 0
2275
+ } ) ;
2276
+ fixture . detectChanges ( ) ;
2277
+ triggerDomEvent ( 'mousemove' , events [ 0 ] , {
2278
+ clientX : rect1 . right + dayWidth - 5 ,
2279
+ clientY : rect1 . bottom + 95
2280
+ } ) ;
2281
+ fixture . detectChanges ( ) ;
2282
+ triggerDomEvent ( 'mouseup' , events [ 0 ] , {
2283
+ clientX : rect1 . right + dayWidth - 5 ,
2284
+ clientY : rect1 . bottom + 95 ,
2285
+ button : 0
2286
+ } ) ;
2287
+ fixture . detectChanges ( ) ;
2288
+ fixture . destroy ( ) ;
2289
+ expect ( dragEvent ) . to . deep . equal ( {
2290
+ type : 'drag' ,
2291
+ allDay : false ,
2292
+ event : fixture . componentInstance . events [ 0 ] ,
2293
+ newStart : moment ( fixture . componentInstance . events [ 0 ] . start )
2294
+ . add ( 3 , 'days' )
2295
+ . add ( 1 , 'hour' )
2296
+ . toDate ( ) ,
2297
+ newEnd : moment ( fixture . componentInstance . events [ 0 ] . end )
2298
+ . add ( 3 , 'days' )
2299
+ . add ( 1 , 'hour' )
2300
+ . toDate ( )
2301
+ } ) ;
2302
+ } ) ;
2303
+
2231
2304
it ( 'should preserve css classes on hour segments when dragging an event' , ( ) => {
2232
2305
const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
2233
2306
CalendarWeekViewComponent
@@ -2351,6 +2424,74 @@ describe('calendarWeekView component', () => {
2351
2424
} ) ;
2352
2425
} ) ;
2353
2426
2427
+ it ( 'should resize a time event to the minimum height with custom hour duration' , ( ) => {
2428
+ const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
2429
+ CalendarWeekViewComponent
2430
+ ) ;
2431
+ fixture . componentInstance . viewDate = new Date ( '2018-07-29' ) ;
2432
+ fixture . componentInstance . events = [
2433
+ {
2434
+ start : moment ( new Date ( '2018-07-29' ) )
2435
+ . startOf ( 'day' )
2436
+ . add ( 4 , 'hours' )
2437
+ . toDate ( ) ,
2438
+ end : moment ( new Date ( '2018-07-29' ) )
2439
+ . startOf ( 'day' )
2440
+ . add ( 6 , 'hours' )
2441
+ . toDate ( ) ,
2442
+ title : 'foo' ,
2443
+ resizable : {
2444
+ afterEnd : true
2445
+ }
2446
+ }
2447
+ ] ;
2448
+ fixture . componentInstance . hourDuration = 40 ;
2449
+ fixture . componentInstance . hourSegmentHeight = 20 ;
2450
+ fixture . componentInstance . ngOnChanges ( {
2451
+ viewDate : { } ,
2452
+ events : { } ,
2453
+ hourDuration : { } ,
2454
+ hourSegmentHeight : { }
2455
+ } ) ;
2456
+ fixture . detectChanges ( ) ;
2457
+ document . body . appendChild ( fixture . nativeElement ) ;
2458
+ const event : HTMLElement = fixture . nativeElement . querySelectorAll (
2459
+ '.cal-event-container'
2460
+ ) [ 0 ] ;
2461
+ const rect : ClientRect = event . getBoundingClientRect ( ) ;
2462
+ const resizeHandle = event . querySelector ( '.cal-resize-handle-after-end' ) ;
2463
+ let resizeEvent : CalendarEventTimesChangedEvent ;
2464
+ fixture . componentInstance . eventTimesChanged . pipe ( take ( 1 ) ) . subscribe ( e => {
2465
+ resizeEvent = e ;
2466
+ } ) ;
2467
+ triggerDomEvent ( 'mousedown' , resizeHandle , {
2468
+ clientX : rect . right ,
2469
+ clientY : rect . bottom ,
2470
+ button : 0
2471
+ } ) ;
2472
+ fixture . detectChanges ( ) ;
2473
+ triggerDomEvent ( 'mousemove' , document . body , {
2474
+ clientX : rect . right ,
2475
+ clientY : rect . bottom - 120
2476
+ } ) ;
2477
+ fixture . detectChanges ( ) ;
2478
+ expect ( event . getBoundingClientRect ( ) . height ) . to . equal ( 20 ) ;
2479
+ triggerDomEvent ( 'mouseup' , document . body , {
2480
+ clientX : rect . right ,
2481
+ clientY : rect . bottom - 120 ,
2482
+ button : 0
2483
+ } ) ;
2484
+ fixture . detectChanges ( ) ;
2485
+ expect ( resizeEvent ) . to . deep . equal ( {
2486
+ type : 'resize' ,
2487
+ event : fixture . componentInstance . events [ 0 ] ,
2488
+ newStart : fixture . componentInstance . events [ 0 ] . start ,
2489
+ newEnd : moment ( fixture . componentInstance . events [ 0 ] . start )
2490
+ . add ( 20 , 'minutes' )
2491
+ . toDate ( )
2492
+ } ) ;
2493
+ } ) ;
2494
+
2354
2495
it ( 'should allow css variables for colors' , ( ) => {
2355
2496
const style = document . createElement ( 'style' ) ;
2356
2497
style . setAttribute ( 'type' , 'text/css' ) ;
0 commit comments