Skip to content

Commit 4b3e530

Browse files
committed
Merge branch 'Octavie-dev' into dev
2 parents b3358fc + bf76a0b commit 4b3e530

File tree

2 files changed

+93
-51
lines changed

2 files changed

+93
-51
lines changed

src/controls/peoplepicker/IPeoplePicker.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,7 @@ export interface IPeoplePickerState {
6868
selectedPersons?: IPersonaProps[];
6969
mostRecentlyUsedPersons: IPersonaProps[];
7070
currentSelectedPersons: IPersonaProps[];
71-
allPersons: [{
72-
id: string,
73-
imageUrl: string,
74-
imageInitials: string,
75-
primaryText: string, //Name
76-
secondaryText: string, //Role
77-
tertiaryText: string, //status
78-
optionalText: string //stgring
79-
}];
71+
allPersons: IPeoplePickerUserItem[];
8072
delayResults?: boolean;
8173
currentPicker?: number | string;
8274
peoplePersonaMenu?: IPersonaProps[];
@@ -86,3 +78,13 @@ export interface IPeoplePickerState {
8678
peopleValidatorText? : string;
8779
showmessageerror: boolean;
8880
}
81+
82+
export interface IPeoplePickerUserItem {
83+
id: string;
84+
imageUrl: string;
85+
imageInitials: string;
86+
primaryText: string; // name
87+
secondaryText: string; // role
88+
tertiaryText: string; // status
89+
optionalText: string; // anything
90+
}

src/controls/peoplepicker/PeoplePickerComponent.tsx

Lines changed: 82 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as strings from 'ControlStrings';
22
import * as React from 'react';
3-
import { IPeoplePickerProps, IPeoplePickerState } from './IPeoplePicker';
3+
import { IPeoplePickerProps, IPeoplePickerState, IPeoplePickerUserItem } from './IPeoplePicker';
44
import { IPersonaProps } from 'office-ui-fabric-react/lib/Persona';
55
import { TooltipHost, DirectionalHint } from 'office-ui-fabric-react/lib/Tooltip';
66
import { IBasePickerSuggestionsProps } from 'office-ui-fabric-react/lib/Pickers';
@@ -16,6 +16,7 @@ import {
1616
} from 'office-ui-fabric-react/lib/Utilities';
1717
import { IUsers } from './IUsers';
1818
import { Label } from 'office-ui-fabric-react/lib/Label';
19+
import { Environment, EnvironmentType } from "@microsoft/sp-core-library";
1920

2021
const suggestionProps: IBasePickerSuggestionsProps = {
2122
suggestionsHeaderText: 'Suggested People',
@@ -41,15 +42,7 @@ export class PeoplePicker extends React.Component<IPeoplePickerProps, IPeoplePic
4142
selectedPersons: [],
4243
mostRecentlyUsedPersons: [],
4344
currentSelectedPersons: [],
44-
allPersons: [{
45-
id: "",
46-
imageUrl: "",
47-
imageInitials: "",
48-
primaryText: "", //Name
49-
secondaryText: "", //Role
50-
tertiaryText: "", //status
51-
optionalText: "" //anything
52-
}],
45+
allPersons: [],
5346
currentPicker: 0,
5447
peoplePartTitle: "",
5548
peoplePartTooltip : "",
@@ -62,8 +55,14 @@ export class PeoplePicker extends React.Component<IPeoplePickerProps, IPeoplePic
6255
* componentWillMount lifecycle hook
6356
*/
6457
public componentWillMount(): void {
65-
// Load the users
66-
this._thisLoadUsers();
58+
if (Environment.type === EnvironmentType.Local) {
59+
// local mode
60+
this._loadLocalWorkbenchUsers();
61+
} else {
62+
// online mode
63+
// Load the users
64+
this._thisLoadUsers();
65+
}
6766
}
6867

6968
/**
@@ -75,6 +74,66 @@ export class PeoplePicker extends React.Component<IPeoplePickerProps, IPeoplePic
7574
return `https://outlook.office365.com/owa/service.svc/s/GetPersonaPhoto?email=${value}&UA=0&size=HR96x96`;
7675
}
7776

77+
/**
78+
* Retrieve the users for local demo and testing purposes
79+
*/
80+
private async _loadLocalWorkbenchUsers(): Promise<void> {
81+
let _fakeUsers: Array<IPeoplePickerUserItem> = new Array<IPeoplePickerUserItem>();
82+
83+
_fakeUsers.push({
84+
id: "10dfa208-d7d4-4aef-a7ea-f9e4bb1b85c1",
85+
imageUrl: "",
86+
imageInitials: "RF",
87+
primaryText: "Roger Federer",
88+
secondaryText: "[email protected]",
89+
tertiaryText: "",
90+
optionalText:""
91+
});
92+
_fakeUsers.push({
93+
id: "10dfa208-d7d4-4aef-a7ea-f9e4bb1b85c2",
94+
imageUrl: "",
95+
imageInitials: "RN",
96+
primaryText: "Rafael Nadal",
97+
secondaryText: "[email protected]",
98+
tertiaryText: "",
99+
optionalText:""
100+
});
101+
_fakeUsers.push({
102+
id: "10dfa208-d7d4-4aef-a7ea-f9e4bb1b85c3",
103+
imageUrl: "",
104+
imageInitials: "ND",
105+
primaryText: "Novak Djokovic",
106+
secondaryText: "[email protected]",
107+
tertiaryText: "",
108+
optionalText:""
109+
});
110+
_fakeUsers.push({
111+
id: "10dfa208-d7d4-4aef-a7ea-f9e4bb1b85c4",
112+
imageUrl: "",
113+
imageInitials: "JP",
114+
primaryText: "Juan Martin del Potro",
115+
secondaryText: "[email protected]",
116+
tertiaryText: "",
117+
optionalText:""
118+
});
119+
120+
let personaList: IPersonaWithMenu[] = [];
121+
for (const persona of _fakeUsers) {
122+
let personaWithMenu: IPersonaWithMenu = {};
123+
assign(personaWithMenu, persona);
124+
personaList.push(personaWithMenu);
125+
}
126+
127+
// update the current state
128+
this.setState({
129+
allPersons: _fakeUsers,
130+
peoplePersonaMenu: personaList,
131+
mostRecentlyUsedPersons: personaList.slice(0, 5),
132+
showmessageerror: this.props.isRequired && this.state.selectedPersons.length === 0
133+
});
134+
135+
}
136+
78137
/**
79138
* Retrieve the users
80139
*/
@@ -95,39 +154,20 @@ export class PeoplePicker extends React.Component<IPeoplePickerProps, IPeoplePic
95154

96155
// Check if items were retrieved
97156
if (items && items.value && items.value.length > 0) {
98-
let userValuesArray: any = [{
99-
id: 0,
100-
imageUrl: "",
101-
imageInitials: "",
102-
primaryText: "", //Name
103-
secondaryText: "", //Email
104-
tertiaryText: "", //status
105-
optionalText: "" //anything
106-
}];
157+
158+
let userValuesArray: Array<IPeoplePickerUserItem> = new Array<IPeoplePickerUserItem>();
107159

108160
// Loop over all the retrieved items
109161
for (let i = 0; i < items.value.length; i++) {
110-
if (i === 0) {
111-
userValuesArray = [{
112-
id: items.value[i].Id,
113-
imageUrl: this.generateUserPhotoLink(items.value[i].Email),
114-
imageInitials: "",
115-
primaryText: items.value[i].Title, //Name
116-
secondaryText: items.value[i].Email, //Email
117-
tertiaryText: "", //status
118-
optionalText: "" //anything
119-
}];
120-
} else {
121-
userValuesArray.push({
122-
id: items.value[i].Id,
123-
imageUrl: this.generateUserPhotoLink(items.value[i].Email),
124-
imageInitials: "",
125-
primaryText: items.value[i].Title, //Name
126-
secondaryText: items.value[i].Email, //Email
127-
tertiaryText: "", //status
128-
optionalText: "" //anything
129-
});
130-
}
162+
userValuesArray.push({
163+
id: items.value[i].Id.toString(),
164+
imageUrl: this.generateUserPhotoLink(items.value[i].Email),
165+
imageInitials: "",
166+
primaryText: items.value[i].Title, // name
167+
secondaryText: items.value[i].Email, // email
168+
tertiaryText: "", // status
169+
optionalText: "" // anything
170+
});
131171
}
132172

133173
let personaList: IPersonaWithMenu[] = [];

0 commit comments

Comments
 (0)