66 */
77
88import * as MicrosoftGraph from '@microsoft/microsoft-graph-types' ;
9+ import { Presence } from '@microsoft/microsoft-graph-types-beta' ;
910import { customElement , html , property , TemplateResult } from 'lit-element' ;
1011import { findPerson , getEmailFromGraphEntity } from '../../graph/graph.people' ;
1112import { getPersonImage } from '../../graph/graph.photos' ;
13+ import { getUserPresence } from '../../graph/graph.presence' ;
1214import { getUserWithPhoto } from '../../graph/graph.user' ;
1315import { IDynamicPerson } from '../../graph/types' ;
1416import { Providers } from '../../Providers' ;
@@ -116,6 +118,28 @@ export class MgtPersonCard extends MgtTemplatedComponent {
116118 } )
117119 public inheritDetails : boolean ;
118120
121+ /**
122+ * determines if person card component renders presence
123+ * @type {boolean }
124+ */
125+ @property ( {
126+ attribute : 'show-presence' ,
127+ type : Boolean
128+ } )
129+ public showPresence : boolean ;
130+
131+ /**
132+ * Gets or sets presence of person
133+ *
134+ * @type {Presence }
135+ * @memberof MgtPerson
136+ */
137+ @property ( {
138+ attribute : 'person-presence' ,
139+ type : Object
140+ } )
141+ public personPresence : Presence ;
142+
119143 /**
120144 * Invoked each time the custom element is appended into a document-connected element
121145 *
@@ -167,6 +191,8 @@ export class MgtPersonCard extends MgtTemplatedComponent {
167191
168192 const person = this . personDetails ;
169193 const image = this . getImage ( ) ;
194+ const presence = this . personPresence ;
195+ const showPresence = this . showPresence ;
170196
171197 // Check for a default template.
172198 // tslint:disable-next-line: no-string-literal
@@ -183,7 +209,7 @@ export class MgtPersonCard extends MgtTemplatedComponent {
183209 personImage : image
184210 } ) ;
185211 if ( ! personDetailsTemplate ) {
186- const personImageTemplate = this . renderPersonImage ( image ) ;
212+ const personImageTemplate = this . renderPersonImage ( image , presence , showPresence ) ;
187213 const personNameTemplate = this . renderPersonName ( person ) ;
188214 const personTitleTemplate = this . renderPersonTitle ( person ) ;
189215 const personSubtitleTemplate = this . renderPersonSubtitle ( person ) ;
@@ -234,10 +260,20 @@ export class MgtPersonCard extends MgtTemplatedComponent {
234260 * @param {* } image
235261 * @memberof MgtPersonCard
236262 */
237- protected renderPersonImage ( imageSrc ?: string ) : TemplateResult {
263+ protected renderPersonImage ( imageSrc ?: string , presence ?: Presence , showPresence ?: boolean ) : TemplateResult {
238264 imageSrc = imageSrc || this . getImage ( ) ;
265+ presence = presence || this . personPresence ;
266+ showPresence = showPresence || this . showPresence ;
267+ const avatarSize = 'large' ;
239268 return html `
240- < mgt-person class ="person-image " .personDetails =${ this . personDetails } .personImage =${ imageSrc } > </ mgt-person >
269+ < mgt-person
270+ class ="person-image "
271+ .personDetails =${ this . personDetails }
272+ .personImage =${ imageSrc }
273+ .personPresence=${ presence }
274+ .showPresence=${ showPresence }
275+ .avatarSize=${ avatarSize }
276+ > </ mgt-person >
241277 ` ;
242278 }
243279
@@ -512,6 +548,8 @@ export class MgtPersonCard extends MgtTemplatedComponent {
512548 if ( parent && ( parent as MgtPerson ) . personDetails ) {
513549 this . personDetails = ( parent as MgtPerson ) . personDetails ;
514550 this . personImage = ( parent as MgtPerson ) . personImage ;
551+ this . personPresence = ( parent as MgtPerson ) . personPresence ;
552+ this . showPresence = ( parent as MgtPerson ) . showPresence ;
515553 }
516554 }
517555
@@ -561,6 +599,25 @@ export class MgtPersonCard extends MgtTemplatedComponent {
561599 }
562600 }
563601 }
602+
603+ // populate presence
604+ const defaultPresence = {
605+ activity : 'Offline' ,
606+ availability : 'Offline' ,
607+ id : null
608+ } ;
609+ if ( ! this . personPresence && this . showPresence ) {
610+ try {
611+ if ( this . personDetails && this . personDetails . id ) {
612+ this . personPresence = await getUserPresence ( graph , this . personDetails . id ) ;
613+ } else {
614+ this . personPresence = defaultPresence ;
615+ }
616+ } catch ( _ ) {
617+ // set up a default Presence in case beta api changes or getting error code
618+ this . personPresence = defaultPresence ;
619+ }
620+ }
564621 }
565622
566623 /**
0 commit comments