@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
71 lines (69 loc) • 4.25 kB
JavaScript
import { doSpHttpFetchOrPostAndCheck } from '../../../components/molecules/SpHttp/Sp/doSpHttpFetch';
import { check4This, Check4 } from '../../../logic/Links/CheckSearch';
import { SourcePropsNoWebUrl } from '../../../components/molecules/source-props/ISourceProps';
import { getCollectionUrl } from '../../../logic/Links/getSPOUrl';
import { getAbsoluteWebUrlFromSourceProps } from '../../../logic/Strings/getAbssoluteWebUrlFromSourceProps';
import { createErrorFpsUsersReturn } from '../../../components/molecules/process-results/createEmptyFpsUsersReturn';
import { MinUserSelect } from '../../../types/fps-returns/sites/users/UserSelect';
import { CurrentOrigin } from '../../../components/molecules/source-props/WindowLocationConstants';
import { getEmailFromLoginName } from '../../../components/atoms/Users/getEmailFromLoginName';
export async function getSiteAdminsAPI(sourceProps, alertMe, consoleLog, size) {
const restFilter = 'IsSiteAdmin eq true';
const results = await getSiteUsersAPI({ ...sourceProps, ...{ restFilter: restFilter } }, alertMe, consoleLog, size);
results.unifiedPerformanceOps.fetch.label.replace('users', 'admins');
return results;
}
export async function getSiteUsersAPI(sourceProps, alertMe, consoleLog, size = 'M') {
const { restFilter, selectThese, } = sourceProps;
// 2024-12-05: Added this because some places like PivotTiles had absoluteWebUrl in webUrl prop... so just taking care of differences
const useUrl = getAbsoluteWebUrlFromSourceProps(sourceProps);
const collectionName = getCollectionUrl(useUrl);
if (!useUrl) {
// NO WebURL... Throw Alert
if (alertMe === true)
alert(`getSiteUsersAPI: ${SourcePropsNoWebUrl}`);
const results = createErrorFpsUsersReturn(useUrl);
results.status = 'NoWeb';
return results;
}
/**
SAMPLE Full SharePoint Items Rest call:
https://example.sharepoint.com/sites/MySite/_api/web/siteUsers?
$select=Id,Title,EULAText,ExpandedField1/Id,ExpandedField1/Title,ExpandedField2/Id,ExpandedField2/Title&
$expand=ExpandedField1,ExpandedField2&
$filter=Title eq 'SomeTitle'&
$orderby=Id desc
*/
let fetchAPI = `${useUrl}/_api/web/siteUsers?`; //$select=${UserGroupSelects.join(',')
fetchAPI += `&$select=${selectThese && selectThese.length > 0 ? selectThese.join(',') : MinUserSelect.join(',')}`;
/**
* 2024-12-06: Discovered that encodeURIComponent is not required and can actually cause issues if
* you call it twice on the same string... then it will encode the encoded characters causing incorrect filter string.
* if ( restFilter ) fetchAPI+= `$filter=${ encodeURIComponent(restFilter) }&`; <<< BAD
*/
if (restFilter)
fetchAPI += `&$filter=${restFilter}`;
const result = await doSpHttpFetchOrPostAndCheck(fetchAPI, 'GET', sourceProps.fpsSpService, '', alertMe, consoleLog, 'users', false, null);
// result.users = result.items ? result.items : [];
// result.fpsContentType = [ 'user' ];
result.unifiedPerformanceOps.fetch.label = `users-${collectionName}`;
// result.unifiedPerformanceOps.fetch.c = result.users.length;
/**
* Added and tested this loop in ReactJSON2 sample webpart for the fps-PeoplePicker component
*/
result.users = result.users.map((user) => {
// was originally passing back the 'AccountName' property as an alternate but that does not exist on this API return so using the LoginName
const imageUrl = `${CurrentOrigin}/_layouts/15/userphoto.aspx?size=${size || 'L'}&accountname=${user.Email ? user.Email : getEmailFromLoginName(user.LoginName)}`;
return { ...user, imageUrl: imageUrl };
});
// initialResult.users.map( user => {
// if (!user.LoginName && user.Name) { user.LoginName = user.Name; }
// if (!user.Email && user.EMail) { user.Email = user.EMail; }
// });
if (check4This(Check4.fpsShowFetchResults_Eq_true) === true) {
console.log(`fps-core-v7 COMPLETE: getSiteUsersAPI ~ 80`, result);
}
;
return result;
}
//# sourceMappingURL=getSiteUsersAPI.js.map