Skip to content

Commit f22285a

Browse files
nmetulevvogtnbeth-panx
authored
Person - added support for a 3rd line (#710)
* Added support for a 3rd line * undo formatting * Update packages/mgt/src/components/mgt-person/mgt-person.ts Co-authored-by: Nicolas Vogt <[email protected]> Co-authored-by: Nicolas Vogt <[email protected]> Co-authored-by: Beth Pan <[email protected]>
1 parent 9040a8e commit f22285a

File tree

6 files changed

+94
-166
lines changed

6 files changed

+94
-166
lines changed

packages/mgt-react/src/generated/react.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,6 @@ export type PersonCardProps = {
9696
export type PersonProps = {
9797
personQuery?: string;
9898
userId?: string;
99-
showName?: boolean;
100-
showEmail?: boolean;
10199
showPresence?: boolean;
102100
personDetails?: IDynamicPerson;
103101
personImage?: string;
@@ -106,6 +104,7 @@ export type PersonProps = {
106104
personCardInteraction?: PersonCardInteraction;
107105
line1Property?: string;
108106
line2Property?: string;
107+
line3Property?: string;
109108
view?: PersonViewType;
110109
avatarSize?: AvatarSize;
111110
templateConverters?: MgtElement.TemplateContext;

packages/mgt/src/components/mgt-person-card/mgt-person-card.scss

Lines changed: 14 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -51,72 +51,29 @@ $person-card-background-color: var(--person-card-background-color, #ffffff);
5151
}
5252

5353
.person-details-container {
54-
display: grid;
55-
grid-template-rows: auto 1fr;
56-
grid-template-columns: auto 1fr;
57-
grid-template-areas:
58-
'image details'
59-
'. icons';
54+
display: flex;
55+
flex-direction: column;
56+
width: calc(var(--mgt-flyout-set-width, 340px) - 30px);
6057
padding: 15px 15px 20px 15px;
6158

62-
.image {
63-
grid-area: image;
64-
.person-image {
65-
--presence-background-color: var(--person-card-background-color, #ffffff);
66-
--presence-icon-color: var(--person-card-background-color, #ffffff);
67-
--avatar-size: 75px;
68-
}
69-
}
70-
71-
.details {
72-
grid-area: details;
73-
margin-left: 14px;
74-
line-height: 1.15;
75-
display: flex;
76-
flex-direction: column;
77-
position: relative;
78-
overflow: hidden;
79-
text-overflow: ellipse;
80-
white-space: nowrap;
81-
background-color: transparent;
82-
width: 100%;
83-
margin-top: 5px;
84-
85-
.display-name {
86-
font-size: $person-card-display-name-font-size;
87-
color: $person-card-display-name-color;
88-
&::after {
89-
content: '';
90-
position: absolute;
91-
width: 100%;
92-
height: 100%;
93-
top: 0;
94-
right: 0;
95-
background: linear-gradient(left, transparent, transparent 80%, $person-card-background-color);
96-
background: -moz-linear-gradient(left, transparent, transparent 80%, $person-card-background-color);
97-
background: -o-linear-gradient(left, transparent, transparent 80%, $person-card-background-color);
98-
background: -ms-linear-gradient(left, transparent, transparent 80%, $person-card-background-color);
99-
background: -webkit-linear-gradient(left, transparent, transparent 80%, $person-card-background-color);
100-
}
101-
}
102-
103-
.job-title {
104-
font-size: $person-card-title-font-size;
105-
color: $person-card-title-color;
106-
}
107-
108-
.department {
109-
font-size: $person-card-subtitle-font-size;
110-
color: $person-card-subtitle-color;
111-
}
59+
.person-image {
60+
--presence-background-color: var(--person-card-background-color, #ffffff);
61+
--presence-icon-color: var(--person-card-background-color, #ffffff);
62+
--avatar-size: 75px;
63+
--font-size: 20px;
64+
--line2-font-size: 14px;
65+
--line2-color: #{$ms-color-gray120};
66+
--line3-font-size: 12px;
67+
--line3-color: #{$ms-color-gray110};
11268
}
11369

11470
.base-icons {
115-
grid-area: icons;
11671
display: flex;
11772
-webkit-align-items: center;
11873
align-items: center;
11974
max-width: 120px;
75+
margin-left: 87px;
76+
margin-top: 4px;
12077

12178
.icon {
12279
display: flex;

packages/mgt/src/components/mgt-person-card/mgt-person-card.ts

Lines changed: 13 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ import { customElement, html, property, TemplateResult } from 'lit-element';
1010
import { classMap } from 'lit-html/directives/class-map';
1111
import { findPeople, getEmailFromGraphEntity } from '../../graph/graph.people';
1212
import { getPersonImage } from '../../graph/graph.photos';
13+
import { getUserPresence } from '../../graph/graph.presence';
1314
import { getUserWithPhoto } from '../../graph/graph.user';
15+
import { getSvg, SvgIcon } from '../../utils/SvgHelper';
1416
import { IDynamicPerson } from '../../graph/types';
1517
import { Providers, ProviderState, MgtTemplatedComponent } from '@microsoft/mgt-element';
18+
import { Presence } from '@microsoft/microsoft-graph-types-beta';
1619
import { TeamsHelper } from '../../utils/TeamsHelper';
17-
import { MgtPerson } from '../mgt-person/mgt-person';
20+
import { MgtPerson, PersonViewType } from '../mgt-person/mgt-person';
1821
import { styles } from './mgt-person-card-css';
1922
import { BasePersonCardSection } from './sections/BasePersonCardSection';
2023
import { MgtPersonCardContact } from './sections/mgt-person-card-contact/mgt-person-card-contact';
2124
import { MgtPersonCardFiles } from './sections/mgt-person-card-files/mgt-person-card-files';
2225
import { MgtPersonCardMessages } from './sections/mgt-person-card-messages/mgt-person-card-messages';
2326
import { MgtPersonCardOrganization } from './sections/mgt-person-card-organization/mgt-person-card-organization';
2427
import { MgtPersonCardProfile } from './sections/mgt-person-card-profile/mgt-person-card-profile';
25-
import { Presence } from '@microsoft/microsoft-graph-types-beta';
26-
import { getUserPresence } from '../../graph/graph.presence';
27-
import { getSvg, SvgIcon } from '../../utils/SvgHelper';
2828

2929
/**
3030
* Web Component used to show detailed data for a person in the Microsoft Graph
@@ -198,16 +198,6 @@ export class MgtPersonCard extends MgtTemplatedComponent {
198198
];
199199
}
200200

201-
/**
202-
* Invoked each time the custom element is appended into a document-connected element
203-
*
204-
* @memberof MgtPersonCard
205-
*/
206-
public connectedCallback() {
207-
super.connectedCallback();
208-
this.addEventListener('click', e => e.stopPropagation());
209-
}
210-
211201
/**
212202
* Synchronizes property values when attributes change.
213203
*
@@ -223,10 +213,6 @@ export class MgtPersonCard extends MgtTemplatedComponent {
223213
return;
224214
}
225215

226-
if (name === 'is-expanded') {
227-
this.isExpanded = false;
228-
}
229-
230216
switch (name) {
231217
case 'person-query':
232218
case 'user-id':
@@ -309,19 +295,11 @@ export class MgtPersonCard extends MgtTemplatedComponent {
309295
personImage: image
310296
});
311297
if (!personDetailsTemplate) {
312-
const personImageTemplate = this.renderPersonImage(image, presence, showPresence);
313-
const personNameTemplate = this.renderPersonName(person);
314-
const personTitleTemplate = this.renderPersonTitle(person);
315-
const personSubtitleTemplate = this.renderPersonSubtitle(person);
298+
const personTemplate = this.renderPerson();
316299
const contactIconsTemplate = this.renderContactIcons(person);
317300

318301
personDetailsTemplate = html`
319-
<div class="image">
320-
${personImageTemplate}
321-
</div>
322-
<div class="details">
323-
${personNameTemplate} ${personTitleTemplate} ${personSubtitleTemplate}
324-
</div>
302+
${personTemplate}
325303
<div class="base-icons">
326304
${contactIconsTemplate}
327305
</div>
@@ -361,56 +339,23 @@ export class MgtPersonCard extends MgtTemplatedComponent {
361339
* @param {*} image
362340
* @memberof MgtPersonCard
363341
*/
364-
protected renderPersonImage(imageSrc?: string, presence?: Presence, showPresence?: boolean): TemplateResult {
365-
imageSrc = imageSrc || this.getImage();
366-
presence = presence || this.personPresence;
367-
showPresence = showPresence || this.showPresence;
342+
protected renderPerson(): TemplateResult {
368343
const avatarSize = 'large';
369344
return html`
370345
<mgt-person
371346
class="person-image"
372347
.personDetails=${this.personDetails}
373-
.personImage=${imageSrc}
374-
.personPresence=${presence}
375-
.showPresence=${showPresence}
348+
.personImage=${this.getImage()}
349+
.personPresence=${this.personPresence}
350+
.showPresence=${this.showPresence}
376351
.avatarSize=${avatarSize}
352+
.view=${PersonViewType.threelines}
353+
.line2Property=${'jobTitle'}
354+
.line3Property=${'officeLocation'}
377355
></mgt-person>
378356
`;
379357
}
380358

381-
/**
382-
* Render the display name and persona details (e.g. department, job title) for a person.
383-
*
384-
* @protected
385-
* @param {IDynamicPerson} [person]
386-
* @returns {TemplateResult}
387-
* @memberof MgtPersonCard
388-
*/
389-
protected renderPersonName(person?: IDynamicPerson): TemplateResult {
390-
person = person || this.personDetails;
391-
return html`
392-
<div class="display-name" title="${person.displayName}">${person.displayName}</div>
393-
`;
394-
}
395-
396-
/**
397-
* Render person title.
398-
*
399-
* @protected
400-
* @param {IDynamicPerson} person
401-
* @returns {TemplateResult}
402-
* @memberof MgtPersonCard
403-
*/
404-
protected renderPersonTitle(person?: IDynamicPerson): TemplateResult {
405-
person = person || this.personDetails;
406-
if (!person.jobTitle) {
407-
return;
408-
}
409-
return html`
410-
<div class="job-title">${person.jobTitle}</div>
411-
`;
412-
}
413-
414359
/**
415360
* Render person subtitle.
416361
*
@@ -437,10 +382,6 @@ export class MgtPersonCard extends MgtTemplatedComponent {
437382
* @memberof MgtPersonCard
438383
*/
439384
protected renderContactIcons(person?: IDynamicPerson): TemplateResult {
440-
if (this.isExpanded) {
441-
return html``;
442-
}
443-
444385
person = person || this.personDetails;
445386
const userPerson = person as MicrosoftGraph.User;
446387

packages/mgt/src/components/mgt-person/mgt-person.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ $line2-font-weight: var(--line2-font-weight, 400);
2929
$line2-color: var(--line2-color, var(--email-color, #{$color}));
3030
$line2-text-transform: var(--line2-text-transform, #{$text-transform});
3131

32+
$line3-font-size: var(--line3-font-size, var(--email-font-size, #{$ms-font-size-s}));
33+
$line3-font-weight: var(--line3-font-weight, 400);
34+
$line3-color: var(--line3-color, var(--email-color, #{$color}));
35+
$line3-text-transform: var(--line3-text-transform, #{$text-transform});
36+
3237
$details-spacing: --details-spacing;
3338

3439
$presence-color-online: #6bb700;
@@ -373,6 +378,13 @@ mgt-person .person-root {
373378
font-weight: $line2-font-weight;
374379
text-transform: $line2-text-transform;
375380
}
381+
382+
.line3 {
383+
color: $line3-color;
384+
font-size: $line3-font-size;
385+
font-weight: $line3-font-weight;
386+
text-transform: $line3-text-transform;
387+
}
376388
}
377389
}
378390

0 commit comments

Comments
 (0)