@@ -10,6 +10,8 @@ import {
10
10
LOCALE_ID ,
11
11
Inject ,
12
12
TemplateRef ,
13
+ ElementRef ,
14
+ AfterViewInit ,
13
15
} from '@angular/core' ;
14
16
import { Subject , Subscription } from 'rxjs' ;
15
17
import {
@@ -133,7 +135,14 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
133
135
[class.cal-ends-within-week]="!allDayEvent.endsAfterWeek"
134
136
[ngClass]="allDayEvent.event?.cssClass"
135
137
[style.width.%]="(100 / days.length) * allDayEvent.span"
136
- [style.marginLeft.%]="(100 / days.length) * allDayEvent.offset"
138
+ [style.marginLeft.%]="
139
+ rtl ? null : (100 / days.length) * allDayEvent.offset
140
+ "
141
+ [style.marginRight.%]="
142
+ rtl
143
+ ? (100 / days.length) * (days.length - allDayEvent.offset) * -1
144
+ : null
145
+ "
137
146
mwlResizable
138
147
[resizeSnapGrid]="{ left: dayColumnWidth, right: dayColumnWidth }"
139
148
[validateResize]="validateResize"
@@ -408,7 +417,8 @@ export interface CalendarWeekViewBeforeRenderEvent extends WeekView {
408
417
</div>
409
418
` ,
410
419
} )
411
- export class CalendarWeekViewComponent implements OnChanges , OnInit , OnDestroy {
420
+ export class CalendarWeekViewComponent
421
+ implements OnChanges , OnInit , OnDestroy , AfterViewInit {
412
422
/**
413
423
* The current view date
414
424
*/
@@ -676,6 +686,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
676
686
*/
677
687
lastDraggedEvent : CalendarEvent ;
678
688
689
+ /**
690
+ * @hidden
691
+ */
692
+ rtl = false ;
693
+
679
694
/**
680
695
* @hidden
681
696
*/
@@ -713,7 +728,8 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
713
728
protected cdr : ChangeDetectorRef ,
714
729
protected utils : CalendarUtils ,
715
730
@Inject ( LOCALE_ID ) locale : string ,
716
- protected dateAdapter : DateAdapter
731
+ protected dateAdapter : DateAdapter ,
732
+ protected element : ElementRef < HTMLElement >
717
733
) {
718
734
this . locale = locale ;
719
735
}
@@ -794,6 +810,14 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
794
810
}
795
811
}
796
812
813
+ /**
814
+ * @hidden
815
+ */
816
+ ngAfterViewInit ( ) {
817
+ this . rtl = getComputedStyle ( this . element . nativeElement ) . direction === 'rtl' ;
818
+ this . cdr . detectChanges ( ) ;
819
+ }
820
+
797
821
/**
798
822
* @hidden
799
823
*/
@@ -881,12 +905,15 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
881
905
allDayEvent
882
906
) ;
883
907
908
+ const modifier = this . rtl ? - 1 : 1 ;
884
909
if ( typeof resizeEvent . edges . left !== 'undefined' ) {
885
- const diff : number = Math . round ( + resizeEvent . edges . left / dayWidth ) ;
910
+ const diff : number =
911
+ Math . round ( + resizeEvent . edges . left / dayWidth ) * modifier ;
886
912
allDayEvent . offset = currentResize . originalOffset + diff ;
887
913
allDayEvent . span = currentResize . originalSpan - diff ;
888
914
} else if ( typeof resizeEvent . edges . right !== 'undefined' ) {
889
- const diff : number = Math . round ( + resizeEvent . edges . right / dayWidth ) ;
915
+ const diff : number =
916
+ Math . round ( + resizeEvent . edges . right / dayWidth ) * modifier ;
890
917
allDayEvent . span = currentResize . originalSpan + diff ;
891
918
}
892
919
}
@@ -1176,7 +1203,9 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
1176
1203
dayWidth : number ,
1177
1204
useY : boolean
1178
1205
) {
1179
- const daysDragged = roundToNearest ( dragEndEvent . x , dayWidth ) / dayWidth ;
1206
+ const daysDragged =
1207
+ ( roundToNearest ( dragEndEvent . x , dayWidth ) / dayWidth ) *
1208
+ ( this . rtl ? - 1 : 1 ) ;
1180
1209
const minutesMoved = useY
1181
1210
? getMinutesMoved (
1182
1211
dragEndEvent . y ,
@@ -1292,10 +1321,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
1292
1321
) ,
1293
1322
} ;
1294
1323
1324
+ const modifier = this . rtl ? - 1 : 1 ;
1325
+
1295
1326
if ( typeof resizeEvent . edges . left !== 'undefined' ) {
1296
- const daysDiff = Math . round (
1297
- + resizeEvent . edges . left / this . dayColumnWidth
1298
- ) ;
1327
+ const daysDiff =
1328
+ Math . round ( + resizeEvent . edges . left / this . dayColumnWidth ) * modifier ;
1299
1329
const newStart = addDaysWithExclusions (
1300
1330
this . dateAdapter ,
1301
1331
newEventDates . start ,
@@ -1308,9 +1338,8 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
1308
1338
newEventDates . start = smallestResizes . start ;
1309
1339
}
1310
1340
} else if ( typeof resizeEvent . edges . right !== 'undefined' ) {
1311
- const daysDiff = Math . round (
1312
- + resizeEvent . edges . right / this . dayColumnWidth
1313
- ) ;
1341
+ const daysDiff =
1342
+ Math . round ( + resizeEvent . edges . right / this . dayColumnWidth ) * modifier ;
1314
1343
const newEnd = addDaysWithExclusions (
1315
1344
this . dateAdapter ,
1316
1345
newEventDates . end ,
@@ -1367,10 +1396,11 @@ export class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {
1367
1396
this . dayColumnWidth = this . getDayColumnWidth ( eventsContainer ) ;
1368
1397
const resizeHelper : CalendarResizeHelper = new CalendarResizeHelper (
1369
1398
eventsContainer ,
1370
- minWidth
1399
+ minWidth ,
1400
+ this . rtl
1371
1401
) ;
1372
- this . validateResize = ( { rectangle } ) =>
1373
- resizeHelper . validateResize ( { rectangle } ) ;
1402
+ this . validateResize = ( { rectangle, edges } ) =>
1403
+ resizeHelper . validateResize ( { rectangle : { ... rectangle } , edges } ) ;
1374
1404
this . cdr . markForCheck ( ) ;
1375
1405
}
1376
1406
}
0 commit comments