Home Reference Source Repository

src/util/sp/searchPerson.js

/**
 * Search for persons in SP using clientPeoplePickerSearchUser.
 *
 * @param {string}	searchText part of name
 * @param {Object}	options
 * @param {number}  options.maximumEntitySuggestions default 10
 * @param {number}  options.principalType default 1
 * @param {number}  options.principalSource default 15
 * @param {string}  options.searchPrefix default ''
 * @param {string}  options.searchSuffix default ''
 *
 * @return {Promise<Object[]>} list of items with person data.
 */
export default function searchPerson(searchText, options) {
    const opts = Object.assign({
        maximumEntitySuggestions: 10,
        principalType: 1,
        principalSource: 15,
        searchPrefix: '',
        searchSuffix: '',
    }, options);

    return new Promise(function(resolve, reject) {
        window.SP.SOD.executeFunc("sp.js", "SP.ClientContext", () => {
            const spContext = window.SP.ClientContext.get_current();
            const queryTerm = '' + opts.searchPrefix + searchText + opts.searchSuffix;
            const query = new window.SP.UI.ApplicationPages.ClientPeoplePickerQueryParameters();
            query.set_allowMultipleEntities(false);
            query.set_maximumEntitySuggestions(opts.maximumEntitySuggestions);
            query.set_principalType(opts.principalType);
            query.set_principalSource(opts.principalSource);
            query.set_queryString(queryTerm);
            const searchResult = window.SP.UI.ApplicationPages.ClientPeoplePickerWebServiceInterface.clientPeoplePickerSearchUser(spContext, query);

            spContext.executeQueryAsync(
                function() {
                    const res = spContext.parseObjectFromJsonString(searchResult.get_value());
                    resolve(res);
                },
                function() {reject(arguments);}
            );
        });
    });
}