Last active
January 8, 2018 18:30
-
-
Save koohq/f6b0b90f82f4045bfca3987219e7cc25 to your computer and use it in GitHub Desktop.
Provides methods to retrieve SPClientPeoplePicker object asynchronously
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* sp-clientpeoplepickerhelper.js | |
* | |
* (c) 2018 koohq. Licensed under CC0. | |
* https://creativecommons.org/publicdomain/zero/1.0/legalcode | |
*/ | |
var SPClientPeoplePickerHelper = (function() { | |
var requiredScriptName = 'sp.js'; | |
function waitUnitlPeoplePickerReady() { | |
return new Promise(function(resolve, reject) { | |
ExecuteOrDelayUntilScriptLoaded(resolve, requiredScriptName); | |
}); | |
} | |
var guidPattern = '[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'; | |
var dictKeyBackwardPattern = '_' + guidPattern + '_\\$ClientPeoplePicker$'; | |
function createDictKeyPattern(fieldName) { | |
return new RegExp('^' + fieldName + dictKeyBackwardPattern); | |
} | |
function findPropertyByNamePattern(obj, namePattern) { | |
var property; | |
Object.keys(obj).some(function(key) { | |
var exists = key.search(namePattern) !== -1; | |
exists && (property = obj[key]); | |
return exists; | |
}); | |
return property; | |
} | |
function getPeoplePickerByNameAsync(fieldName) { | |
return waitUnitlPeoplePickerReady().then(function() { | |
var keyPattern = createDictKeyPattern(fieldName); | |
var dict = SPClientPeoplePicker.SPClientPeoplePickerDict; | |
return findPropertyByNamePattern(dict, keyPattern); | |
}); | |
} | |
function getPeoplePickerByIdAsync(topLevelElementId) { | |
return waitUnitlPeoplePickerReady().then(function() { | |
var dict = SPClientPeoplePicker.SPClientPeoplePickerDict; | |
return dict[topLevelElementId]; | |
}); | |
} | |
return { | |
getPeoplePickerByNameAsync: getPeoplePickerByNameAsync, | |
getPeoplePickerByIdAsync: getPeoplePickerByIdAsync | |
}; | |
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* sp-clientpeoplepickerhelper.usage.js | |
* | |
* (c) 2018 koohq. Licensed under CC0. | |
* https://creativecommons.org/publicdomain/zero/1.0/legalcode | |
*/ | |
// retrieve by field name | |
SPClientPeoplePickerHelper.getPeoplePickerByNameAsync('Manager') | |
.then(function(picker) { picker.AddUnresolvedUser({ Key: 'LoginID or Email' }, true); }); | |
// retrieve by ID (div.sp-peoplepicker-topLevel's ID of target field) | |
var topElementId = 'Manager_eea851b8-3060-44e3-9062-c13e236f62ef_$ClientPeoplePicker'; | |
SPClientPeoplePickerHelper.getPeoplePickerByIDAsync(topElementId) | |
.then(function(picker) { picker.AddUnresolvedUser({ Key: 'LoginID or Email' }, true); }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment