Skip to content

Commit 429094b

Browse files
Adds support for preferred timezone in mgt-agenda. (#737)
Closes #681
1 parent 3d951b2 commit 429094b

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

packages/mgt/src/components/mgt-agenda/mgt-agenda.graph.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ import { GraphPageIterator } from '../../utils/GraphPageIterator';
1616
* @param {Date} startDateTime
1717
* @param {Date} endDateTime
1818
* @param {string} [groupId]
19+
* @param {string} preferredTimezone
1920
* @returns {(Promise<Event[]>)}
2021
* @memberof Graph
2122
*/
2223
export function getEventsPageIterator(
2324
graph: IGraph,
2425
startDateTime: Date,
2526
endDateTime: Date,
26-
groupId?: string
27+
groupId?: string,
28+
preferredTimezone?: string
2729
): Promise<GraphPageIterator<MicrosoftGraph.Event>> {
2830
const scopes = 'calendars.read';
2931

@@ -40,10 +42,14 @@ export function getEventsPageIterator(
4042

4143
uri += `/calendarview?${sdt}&${edt}`;
4244

43-
const request = graph
45+
let request = graph
4446
.api(uri)
4547
.middlewareOptions(prepScopes(scopes))
4648
.orderby('start/dateTime');
4749

50+
if (preferredTimezone) {
51+
request = request.header('Prefer', `outlook.timezone="${preferredTimezone}"`);
52+
}
53+
4854
return GraphPageIterator.create<MicrosoftGraph.Event>(graph, request);
4955
}

packages/mgt/src/components/mgt-agenda/mgt-agenda.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,29 @@ export class MgtAgenda extends MgtTemplatedComponent {
159159
})
160160
public groupByDay: boolean;
161161

162+
/**
163+
* allows developer to specify preferred timezone that should be used for
164+
* retrieving events from Graph, eg. `Pacific Standard Time`. The preferred timezone for
165+
* the current user can be retrieved by calling `me/mailboxSettings` and
166+
* retrieving the value of the `timeZone` property.
167+
* @type {string}
168+
*/
169+
@property({
170+
attribute: 'preferred-timezone',
171+
type: String
172+
})
173+
public get preferredTimezone(): string {
174+
return this._preferredTimezone;
175+
}
176+
public set preferredTimezone(value) {
177+
if (this._preferredTimezone === value) {
178+
return;
179+
}
180+
181+
this._preferredTimezone = value;
182+
this.reloadState();
183+
}
184+
162185
/**
163186
* determines width available for agenda component.
164187
* @type {boolean}
@@ -169,6 +192,7 @@ export class MgtAgenda extends MgtTemplatedComponent {
169192
private _days: number = 3;
170193
private _groupId: string;
171194
private _date: string;
195+
private _preferredTimezone: string;
172196

173197
constructor() {
174198
super();
@@ -494,6 +518,10 @@ export class MgtAgenda extends MgtTemplatedComponent {
494518
request = request.middlewareOptions(prepScopes(scope));
495519
}
496520

521+
if (this.preferredTimezone) {
522+
request = request.header('Prefer', `outlook.timezone="${this.preferredTimezone}"`);
523+
}
524+
497525
const results = await request.get();
498526

499527
if (results && results.value) {
@@ -507,7 +535,7 @@ export class MgtAgenda extends MgtTemplatedComponent {
507535
const end = new Date(start.getTime());
508536
end.setDate(start.getDate() + this.days);
509537
try {
510-
const iterator = await getEventsPageIterator(graph, start, end, this.groupId);
538+
const iterator = await getEventsPageIterator(graph, start, end, this.groupId, this.preferredTimezone);
511539

512540
if (iterator && iterator.value) {
513541
this.events = iterator.value;

0 commit comments

Comments
 (0)