Home Reference Source Repository

src/util/sp/fetchViewer.js

/**
 * Get the currently logged in user.
 *
 * @return {Promise<Object>} object of user data.
 */
export default function fetchViewer(prefix = '') {
    return new Promise(function(resolve, reject) {
        window.SP.SOD.executeFunc("sp.js", "SP.ClientContext", function(){
            window.SP.SOD.registerSod("sp.userprofiles.js", window.SP.Utilities.Utility.getLayoutsPageUrl("sp.userprofiles.js"));
            window.SP.SOD.executeFunc("sp.userprofiles.js", "SP.UserProfiles.PeopleManager", () => {
                const ctx = window.SP.ClientContext.get_current();
                const manager = new window.SP.UserProfiles.PeopleManager(ctx);

                const currentUser = ctx.get_web().get_currentUser();
                ctx.load(currentUser);

                const memberGroup = ctx.get_web().get_siteGroups().getByName("Members");
                //ctx.load(memberGroup, "CanCurrentUserViewMembership", "OnlyAllowMembersViewMembership");
                ctx.load(memberGroup, "CanCurrentUserViewMembership");

                const adminGroup = ctx.get_web().get_siteGroups().getByName("Saksbehandlere");
                ctx.load(adminGroup, "CanCurrentUserViewMembership", "OnlyAllowMembersViewMembership");

                ctx.executeQueryAsync(
                    function(){
                        const username = currentUser.get_loginName();
                        const userProperties = manager.getPropertiesFor(username);
                        ctx.load(userProperties);
                        ctx.executeQueryAsync(
                            function(){
                                const user = {};
                                const props = userProperties.get_userProfileProperties();
                                user.SID = props.SID;
                                user.AccountName = props.AccountName;
                                user.PreferredName = props.PrefferedName;
                                user.Title = props.Title;
                                user.PictureUrl = props.PictureUrl;
                                user.UserName = props.UserName;
                                user.Office = props.Office;
                                user.WorkEmail = props.WorkEmail;
                                user.TIAEnhet = props.TIAEnhet;
                                user.TIATittel = props.TIATittel;
                                user.TIARolleType = props.TIARolleType;
                                user.TIATypeStilling = props.TIATypeStilling;
                                //user.member = memberGroup.get_canCurrentUserViewMembership() && memberGroup.get_onlyAllowMembersViewMembership() ? true : false;
                                user.member = memberGroup.get_canCurrentUserViewMembership() ? true : false;
                                user.admin = adminGroup.get_canCurrentUserViewMembership() && adminGroup.get_onlyAllowMembersViewMembership() ? true : false;

                                resolve(user);
                            },
                            function(sender, args){reject(sender, args);}
                        );
                    },
                    function(sender, args){reject(sender, args);}
                );
            });
        });
    });
}