Bonjour,
Dans mon projet je me suis servir du pluging angular-calendar.
Le problème que j'ai et que j'aimerai pouvoir changer la couleur d'affichage d'un événement en fonction de son type. J'ai donc créer la fonction mais cela ne marche car c'est toujours la couleur de base qui est affiché.
voici le code de calendar.component.ts
et voici le code calendar.component.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 import { Component, OnInit, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, TemplateRef } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { map } from 'rxjs/operators'; import { isSameMonth, isSameDay, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, format, } from 'date-fns'; import { Observable, Subject } from 'rxjs'; import { CalendarDateFormatter, CalendarEvent, CalendarEventAction, CalendarEventTimesChangedEvent, CalendarView, CalendarWeekViewBeforeRenderEvent, CalendarDayViewBeforeRenderEvent, DAYS_OF_WEEK } from 'angular-calendar'; import localeFr from '@angular/common/locales/fr'; import { registerLocaleData } from '@angular/common'; import { Router } from '@angular/router'; import { CustomDateFormatter } from 'src/app/calendar/custom-date-formatter.provider'; interface Calendar { idBooking: number; fullNameCustomer: string; start: string; end: string; formulaBooking: string; } function changeColor(formulaBooking) { if (formulaBooking === 'technicalControl') { let color1 = { primary: '#0AFBDB', secondary: '#078372' } return color1 } else if (formulaBooking === 'round') { let color2 = { primary: '#E611B4', secondary: '#830766' } return color2 } else if (formulaBooking === 'forth' || formulaBooking === 'back') { let color3 = { primary: '#E67B11', secondary: '#934F0C' } return color3 } } registerLocaleData(localeFr); @Component({ selector: 'app-calendar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, templateUrl: './calendar.component.html', styleUrls: ['./calendar.component.css'], providers: [ { provide: CalendarDateFormatter, useClass: CustomDateFormatter, }, ] }) export class CalendarComponent implements OnInit { view: CalendarView = CalendarView.Week; excludeDays: number[] = [0, 6]; weekStartsOn = DAYS_OF_WEEK.SUNDAY; CalendarView = CalendarView; viewDate: Date = new Date(); events$: Observable<CalendarEvent[]>; activeDayIsOpen: boolean = false; locale: string = 'fr'; technicalControl: string; round: string; back: string; forth: string; changeDay(date: Date): void { this.viewDate = date; this.view = CalendarView.Day; } constructor(private http: HttpClient, private router: Router) { } ngOnInit(): void { this.fetchEvents(); } fetchEvents() { this.events$ = this.http.get<Calendar[]>('http://localhost:8888/MoutteCAPI/backend/api/booking/prepareCalendar.php').pipe( map(res => { return res.map(event => { return { idBooking: event.idBooking, title: event.fullNameCustomer, start: new Date(event.start), end: new Date(event.end), colors: changeColor(event.formulaBooking) }; }); }) ); } setView(view: CalendarView) { this.view = view; } closeOpenMonthViewDay() { this.activeDayIsOpen = false; } eventClicked({ event }): void { this.router.navigate(['/booking', event.idBooking]); } beforeWeekViewRender(renderEvent: CalendarWeekViewBeforeRenderEvent): void { renderEvent.hourColumns.forEach(hourColumn => { hourColumn.hours.forEach(hour => { hour.segments.forEach(segment => { if ( segment.date.getHours() >= 12 && segment.date.getMinutes() === 30 && segment.date.getHours() <= 13 ) { segment.cssClass = 'bg-disabled'; } }); }); }); } beforeWeekViewRender2(renderEvent: CalendarWeekViewBeforeRenderEvent): void { renderEvent.hourColumns.forEach(hourColumn => { hourColumn.hours.forEach(hour => { hour.segments.forEach(segment => { if (segment.date.getHours() === 13 ) { segment.cssClass = 'bg-disabled'; } }); }); }); } }
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142 <div class="row mt-5 mb-5 pt"> <div class="text-center col-12"> <h2>Disponibilité Mouttec</h2> <button style="font-size: 15px;" routerLink="/addBooking">Ajouter un rendez-vous</button> </div> </div> <div class="row mb-5 pl-5"> <div class="text-left col-2 offset-1"> <h5>Légende :</h5> </div> <div class="text-left col-3 d-flex flex-row"> <p class="legend1 mr-2"></p> <p>Contrôle technique</p> </div> <div class="text-left col-2 d-flex flex-row"> <p class="legend2 mr-2"></p> <p>Trajet simple</p> </div> <div class="text-left col-3 d-flex flex-row"> <p class="legend3 mr-2"></p> <p>Trajet Aller/Retour</p> </div> </div> <div class="row text-center"> <div class="col-md-4"> <div class="btn-group"> <div class="button" mwlCalendarPreviousView [view]="view" [(viewDate)]="viewDate" (viewDateChange)="closeOpenMonthViewDay()" [excludeDays]="excludeDays" > Précédant </div> <div class="buttonInversion" mwlCalendarToday [(viewDate)]="viewDate" > Aujourd'hui </div> <div class="button" mwlCalendarNextView [view]="view" [(viewDate)]="viewDate" (viewDateChange)="closeOpenMonthViewDay()" [excludeDays]="excludeDays" > Suivant </div> </div> </div> <div class="col-md-4"> <h3>{{ viewDate | calendarDate:(view + 'ViewTitle'):'fr' }}</h3> </div> <div class="col-md-4"> <div class="btn-group"> <div class="buttonInversion" (click)="setView(CalendarView.Month)" [class.active]="view === CalendarView.Month" > Mensuelle </div> <div class="buttonInversion" (click)="setView(CalendarView.Week)" [class.active]="view === CalendarView.Week" > Hebdommadaire </div> <div class="buttonInversion" (click)="setView(CalendarView.Day)" [class.active]="view === CalendarView.Day" > Journalier </div> </div> </div> </div> <br /> <ng-template #loading> <div class="text-center"> <i class="fas fa-spin fa-spinner fa-5x"></i> <br /> Loading events... </div> </ng-template> <div *ngIf="events$ | async; else loading; let events" class="pb-5"> <div [ngSwitch]="view"> <mwl-calendar-month-view *ngSwitchCase="CalendarView.Month" [viewDate]="viewDate" [events]="events" [refresh]="refresh" [refresh]="refresh" (dayClicked)="changeDay($event.day.date)" (viewDateChange)="fetchEvents()" (viewChange)="fetchEvents()" > </mwl-calendar-month-view> <mwl-calendar-week-view *ngSwitchCase="CalendarView.Week" [viewDate]="viewDate" [events]="events" [refresh]="refresh" [excludeDays]="excludeDays" [locale]="locale" [dayStartHour]="7" [dayStartMinute]="00" [dayEndHour]="21" [dayEndMinute]="00" (beforeViewRender)="beforeWeekViewRender($event)" (beforeViewRender)="beforeWeekViewRender2($event)" (dayHeaderClicked)="changeDay($event.day.date)" (eventClicked)="eventClicked($event)" > </mwl-calendar-week-view> <mwl-calendar-day-view *ngSwitchCase="CalendarView.Day" [viewDate]="viewDate" [events]="events" [refresh]="refresh" [locale]="locale" [dayStartHour]="7" [dayStartMinute]="00" [dayEndHour]="21" [dayEndMinute]="00" (beforeViewRender)="beforeWeekViewRender($event)" (beforeViewRender)="beforeWeekViewRender2($event)" (eventClicked)="eventClicked($event)" > </mwl-calendar-day-view> </div> </div>
Partager