@@ -701,6 +701,102 @@ describe('calendarWeekView component', () => {
701
701
expect ( eventDropped ) . to . have . been . calledOnce ;
702
702
} ) ;
703
703
704
+ it ( 'should allow the all day event to be dragged and dropped and control where it can be dragged' , ( ) => {
705
+ const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
706
+ CalendarWeekViewComponent
707
+ ) ;
708
+ fixture . componentInstance . viewDate = new Date ( '2016-12-08' ) ;
709
+ fixture . componentInstance . events = [
710
+ {
711
+ title : 'foo' ,
712
+ start : moment ( '2016-12-08' ) . add ( 4 , 'hours' ) . toDate ( ) ,
713
+ end : moment ( '2016-12-08' ) . add ( 6 , 'hours' ) . toDate ( ) ,
714
+ draggable : true ,
715
+ allDay : true ,
716
+ } ,
717
+ ] ;
718
+ fixture . componentInstance . ngOnChanges ( { viewDate : { } , events : { } } ) ;
719
+ fixture . detectChanges ( ) ;
720
+ document . body . appendChild ( fixture . nativeElement ) ;
721
+ // remove the header as it was causing the test to fail
722
+ const header : HTMLElement = fixture . nativeElement . querySelector (
723
+ '.cal-day-headers'
724
+ ) ;
725
+ header . parentNode . removeChild ( header ) ;
726
+ const event : HTMLElement = fixture . nativeElement . querySelector (
727
+ '.cal-event-container'
728
+ ) ;
729
+ const dayWidth : number = event . parentElement . offsetWidth / 7 ;
730
+ const eventPosition : ClientRect = event . getBoundingClientRect ( ) ;
731
+ const eventDropped = sinon . spy ( ) ;
732
+ const validateEventTimesChanged = sinon
733
+ . stub ( )
734
+ . onFirstCall ( )
735
+ . returns ( true )
736
+ . onSecondCall ( )
737
+ . returns ( false ) ;
738
+ fixture . componentInstance . validateEventTimesChanged = validateEventTimesChanged ;
739
+ fixture . componentInstance . eventTimesChanged
740
+ . pipe ( take ( 1 ) )
741
+ . subscribe ( eventDropped ) ;
742
+ triggerDomEvent ( 'mousedown' , event , {
743
+ clientX : eventPosition . left ,
744
+ clientY : eventPosition . top ,
745
+ button : 0 ,
746
+ } ) ;
747
+ fixture . detectChanges ( ) ;
748
+ triggerDomEvent ( 'mousemove' , document . body , {
749
+ clientX : eventPosition . left ,
750
+ clientY : eventPosition . top ,
751
+ } ) ;
752
+ fixture . detectChanges ( ) ;
753
+ triggerDomEvent ( 'mousemove' , document . body , {
754
+ clientX : eventPosition . left - dayWidth ,
755
+ clientY : eventPosition . top ,
756
+ } ) ;
757
+ fixture . detectChanges ( ) ;
758
+ const ghostElement = event . nextSibling as HTMLElement ;
759
+ expect ( Math . round ( ghostElement . getBoundingClientRect ( ) . left ) ) . to . equal (
760
+ Math . round ( eventPosition . left - dayWidth ) + 1
761
+ ) ;
762
+ triggerDomEvent ( 'mousemove' , document . body , {
763
+ clientX : eventPosition . left - dayWidth * 2 ,
764
+ clientY : eventPosition . top ,
765
+ } ) ;
766
+ fixture . detectChanges ( ) ;
767
+ expect ( Math . round ( ghostElement . getBoundingClientRect ( ) . left ) ) . to . equal (
768
+ Math . round ( eventPosition . left - dayWidth ) + 1
769
+ ) ;
770
+ triggerDomEvent ( 'mouseup' , document . body , {
771
+ clientX : eventPosition . left - dayWidth * 2 ,
772
+ clientY : eventPosition . top ,
773
+ button : 0 ,
774
+ } ) ;
775
+ fixture . detectChanges ( ) ;
776
+ fixture . destroy ( ) ;
777
+ expect ( eventDropped . getCall ( 0 ) . args [ 0 ] ) . to . deep . equal ( {
778
+ type : 'drag' ,
779
+ event : fixture . componentInstance . events [ 0 ] ,
780
+ newStart : moment ( '2016-12-07' ) . add ( 4 , 'hours' ) . toDate ( ) ,
781
+ newEnd : moment ( '2016-12-07' ) . add ( 6 , 'hours' ) . toDate ( ) ,
782
+ allDay : true ,
783
+ } ) ;
784
+ expect ( eventDropped ) . to . have . been . calledOnce ;
785
+ expect ( validateEventTimesChanged ) . to . have . been . calledTwice ;
786
+ expect ( validateEventTimesChanged . getCall ( 0 ) . args [ 0 ] ) . to . deep . equal ( {
787
+ type : 'drag' ,
788
+ event : fixture . componentInstance . events [ 0 ] ,
789
+ newStart : moment ( '2016-12-07' ) . add ( 4 , 'hours' ) . toDate ( ) ,
790
+ newEnd : moment ( '2016-12-07' ) . add ( 6 , 'hours' ) . toDate ( ) ,
791
+ } ) ;
792
+ expect ( validateEventTimesChanged . getCall ( 1 ) . args [ 0 ] ) . to . deep . equal ( {
793
+ type : 'drag' ,
794
+ event : fixture . componentInstance . events [ 0 ] ,
795
+ newStart : moment ( '2016-12-06' ) . add ( 4 , 'hours' ) . toDate ( ) ,
796
+ newEnd : moment ( '2016-12-06' ) . add ( 6 , 'hours' ) . toDate ( ) ,
797
+ } ) ;
798
+ } ) ;
799
+
704
800
it ( 'should allow all day events to be dragged outside of the calendar' , ( ) => {
705
801
const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
706
802
CalendarWeekViewComponent
@@ -709,7 +805,6 @@ describe('calendarWeekView component', () => {
709
805
fixture . componentInstance . events = [
710
806
{
711
807
title : 'foo' ,
712
- color : { primary : '' , secondary : '' } ,
713
808
start : moment ( '2016-12-08' ) . add ( 4 , 'hours' ) . toDate ( ) ,
714
809
end : moment ( '2016-12-08' ) . add ( 6 , 'hours' ) . toDate ( ) ,
715
810
draggable : true ,
@@ -833,7 +928,6 @@ describe('calendarWeekView component', () => {
833
928
fixture . componentInstance . events = [
834
929
{
835
930
title : 'foo' ,
836
- color : { primary : '' , secondary : '' } ,
837
931
start : moment ( '2016-06-27' ) . add ( 4 , 'hours' ) . toDate ( ) ,
838
932
end : moment ( '2016-06-27' ) . add ( 6 , 'hours' ) . toDate ( ) ,
839
933
resizable : {
@@ -887,7 +981,6 @@ describe('calendarWeekView component', () => {
887
981
fixture . componentInstance . events = [
888
982
{
889
983
title : 'foo' ,
890
- color : { primary : '' , secondary : '' } ,
891
984
start : moment ( '2016-06-27' ) . add ( 4 , 'hours' ) . toDate ( ) ,
892
985
end : moment ( '2016-06-27' ) . add ( 6 , 'hours' ) . toDate ( ) ,
893
986
resizable : {
@@ -1829,6 +1922,106 @@ describe('calendarWeekView component', () => {
1829
1922
} ) ;
1830
1923
} ) ;
1831
1924
1925
+ it ( 'should control dragging time events' , ( ) => {
1926
+ const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
1927
+ CalendarWeekViewComponent
1928
+ ) ;
1929
+ fixture . componentInstance . viewDate = new Date ( '2018-07-29' ) ;
1930
+ fixture . componentInstance . events = [
1931
+ {
1932
+ start : moment ( new Date ( '2018-07-29' ) )
1933
+ . startOf ( 'day' )
1934
+ . add ( 3 , 'hours' )
1935
+ . toDate ( ) ,
1936
+ end : moment ( new Date ( '2018-07-29' ) )
1937
+ . startOf ( 'day' )
1938
+ . add ( 1 , 'day' )
1939
+ . add ( 18 , 'hours' )
1940
+ . toDate ( ) ,
1941
+ title : 'foo' ,
1942
+ draggable : true ,
1943
+ } ,
1944
+ ] ;
1945
+ const validateEventTimesChanged = sinon
1946
+ . stub ( )
1947
+ . onFirstCall ( )
1948
+ . returns ( true )
1949
+ . onSecondCall ( )
1950
+ . returns ( false ) ;
1951
+ fixture . componentInstance . validateEventTimesChanged = validateEventTimesChanged ;
1952
+ fixture . componentInstance . ngOnChanges ( { viewDate : { } , events : { } } ) ;
1953
+ fixture . detectChanges ( ) ;
1954
+ document . body . appendChild ( fixture . nativeElement ) ;
1955
+ const event = fixture . nativeElement . querySelector ( '.cal-event-container' ) ;
1956
+ const rect : ClientRect = event . getBoundingClientRect ( ) ;
1957
+ let dragEvent : CalendarEventTimesChangedEvent ;
1958
+ fixture . componentInstance . eventTimesChanged . pipe ( take ( 1 ) ) . subscribe ( ( e ) => {
1959
+ dragEvent = e ;
1960
+ } ) ;
1961
+ triggerDomEvent ( 'mousedown' , event , {
1962
+ clientX : rect . right ,
1963
+ clientY : rect . bottom ,
1964
+ button : 0 ,
1965
+ } ) ;
1966
+ fixture . detectChanges ( ) ;
1967
+ triggerDomEvent ( 'mousemove' , event , {
1968
+ clientX : rect . right ,
1969
+ clientY : rect . bottom ,
1970
+ } ) ;
1971
+ fixture . detectChanges ( ) ;
1972
+ triggerDomEvent ( 'mousemove' , event , {
1973
+ clientX : rect . right ,
1974
+ clientY : rect . bottom + 95 ,
1975
+ } ) ;
1976
+ fixture . detectChanges ( ) ;
1977
+ expect ( event . getBoundingClientRect ( ) . top ) . to . equal ( rect . top + 90 ) ;
1978
+ triggerDomEvent ( 'mousemove' , event , {
1979
+ clientX : rect . right ,
1980
+ clientY : rect . bottom + 180 ,
1981
+ } ) ;
1982
+ fixture . detectChanges ( ) ;
1983
+ expect ( event . getBoundingClientRect ( ) . top ) . to . equal ( rect . top + 90 ) ;
1984
+ triggerDomEvent ( 'mouseup' , event , {
1985
+ clientX : rect . right ,
1986
+ clientY : rect . bottom + 180 ,
1987
+ button : 0 ,
1988
+ } ) ;
1989
+ fixture . detectChanges ( ) ;
1990
+ fixture . destroy ( ) ;
1991
+ expect ( dragEvent ) . to . deep . equal ( {
1992
+ type : 'drag' ,
1993
+ allDay : false ,
1994
+ event : fixture . componentInstance . events [ 0 ] ,
1995
+ newStart : moment ( fixture . componentInstance . events [ 0 ] . start )
1996
+ . add ( 90 , 'minutes' )
1997
+ . toDate ( ) ,
1998
+ newEnd : moment ( fixture . componentInstance . events [ 0 ] . end )
1999
+ . add ( 90 , 'minutes' )
2000
+ . toDate ( ) ,
2001
+ } ) ;
2002
+ expect ( validateEventTimesChanged ) . to . have . been . calledTwice ;
2003
+ expect ( validateEventTimesChanged . getCall ( 0 ) . args [ 0 ] ) . to . deep . equal ( {
2004
+ type : 'drag' ,
2005
+ event : fixture . componentInstance . events [ 0 ] ,
2006
+ newStart : moment ( fixture . componentInstance . events [ 0 ] . start )
2007
+ . add ( 90 , 'minutes' )
2008
+ . toDate ( ) ,
2009
+ newEnd : moment ( fixture . componentInstance . events [ 0 ] . end )
2010
+ . add ( 90 , 'minutes' )
2011
+ . toDate ( ) ,
2012
+ } ) ;
2013
+ expect ( validateEventTimesChanged . getCall ( 1 ) . args [ 0 ] ) . to . deep . equal ( {
2014
+ type : 'drag' ,
2015
+ event : fixture . componentInstance . events [ 0 ] ,
2016
+ newStart : moment ( fixture . componentInstance . events [ 0 ] . start )
2017
+ . add ( 180 , 'minutes' )
2018
+ . toDate ( ) ,
2019
+ newEnd : moment ( fixture . componentInstance . events [ 0 ] . end )
2020
+ . add ( 180 , 'minutes' )
2021
+ . toDate ( ) ,
2022
+ } ) ;
2023
+ } ) ;
2024
+
1832
2025
it ( 'should drag time events back to their original position while snapping to a grid' , ( ) => {
1833
2026
const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent (
1834
2027
CalendarWeekViewComponent
0 commit comments