@pnp/spfx-controls-react
Version:
Reusable React controls for SharePoint Framework solutions
171 lines • 8.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useGraphUserAPI = void 0;
var tslib_1 = require("tslib");
/* eslint-disable no-case-declarations */
/* eslint-disable @typescript-eslint/no-explicit-any */
var React = tslib_1.__importStar(require("react"));
var useLocalStorage_1 = require("./useLocalStorage");
var useUtils_1 = require("./useUtils");
var useGraphUserAPI = function (context) {
var _a = (0, useLocalStorage_1.useCache)("local"), getCacheValue = _a.getCacheValue, setCacheValue = _a.setCacheValue;
var _b = (0, useUtils_1.useUtils)(), b64toBlob = _b.b64toBlob, blobToBase64 = _b.blobToBase64;
var graphClient = React.useMemo(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!context)
return [2 /*return*/, undefined];
return [4 /*yield*/, context.msGraphClientFactory.getClient("3")];
case 1: return [2 /*return*/, _a.sent()];
}
});
}); }, [context]);
var getUserByName = React.useCallback(function (searchName) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var response, error_1;
var _a, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
if (!graphClient || !searchName)
return [2 /*return*/, undefined];
_c.label = 1;
case 1:
_c.trys.push([1, 4, , 5]);
return [4 /*yield*/, graphClient];
case 2: return [4 /*yield*/, ((_a = (_c.sent())) === null || _a === void 0 ? void 0 : _a.api("/users?$filter=startswith(displayName,'".concat(searchName, "') and accountEnabled eq true and userType eq 'Member'")).select("displayName,mail,jobTitle,department,officeLocation,preferredLanguage,accountEnabled,assignedLicenses,assignedPlans,usageLocation,userPrincipalName").get())];
case 3:
response = _c.sent();
if (response) {
return [2 /*return*/, (_b = response === null || response === void 0 ? void 0 : response.value) !== null && _b !== void 0 ? _b : undefined];
}
return [3 /*break*/, 5];
case 4:
error_1 = _c.sent();
console.log("[getUserByName] error:", error_1);
throw new Error("Something went wrong when fetching user");
case 5: return [2 /*return*/, undefined];
}
});
}); }, [graphClient]);
var getUserById = React.useCallback(function (user) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var userInfo, blobPhoto, usersResults, batchRequests, batchResults, responses, _i, responses_1, response, _a, binToBlob, _b, error_2;
var _c, _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
// Create a Batch Request
// 2 rquests
// id=1 = user Info
// id=2 = user Photo
if (!graphClient)
return [2 /*return*/, undefined];
batchRequests = [
{
id: "1",
url: "/users/".concat(user, "?$select=country,id, displayName,mail,jobTitle,department,officeLocation,preferredLanguage,accountEnabled,assignedLicenses,assignedPlans,usageLocation,userPrincipalName"),
method: "GET",
headers: {
ConsistencyLevel: "eventual",
},
},
{
id: "2",
url: "/users/".concat(user, "/photo/$value"),
headers: { "content-type": "img/jpg" },
method: "GET",
},
];
_e.label = 1;
case 1:
_e.trys.push([1, 15, , 16]);
return [4 /*yield*/, getCacheValue("".concat(user))];
case 2:
userInfo = _e.sent();
if (userInfo) {
return [2 /*return*/, userInfo];
}
return [4 /*yield*/, graphClient];
case 3: return [4 /*yield*/, ((_c = (_e.sent())) === null || _c === void 0 ? void 0 : _c.api("/$batch").version("v1.0").post({ requests: batchRequests }))];
case 4:
batchResults = _e.sent();
responses = batchResults === null || batchResults === void 0 ? void 0 : batchResults.responses;
_i = 0, responses_1 = responses;
_e.label = 5;
case 5:
if (!(_i < responses_1.length)) return [3 /*break*/, 14];
response = responses_1[_i];
_a = response.id;
switch (_a) {
case "1": return [3 /*break*/, 6];
case "2": return [3 /*break*/, 7];
}
return [3 /*break*/, 12];
case 6:
usersResults = response.body;
return [3 /*break*/, 13];
case 7:
if (!(response === null || response === void 0 ? void 0 : response.body)) return [3 /*break*/, 9];
return [4 /*yield*/, b64toBlob(response === null || response === void 0 ? void 0 : response.body, "img/jpg")];
case 8:
_b = _e.sent();
return [3 /*break*/, 10];
case 9:
_b = undefined;
_e.label = 10;
case 10:
binToBlob = _b;
return [4 /*yield*/, blobToBase64(binToBlob)];
case 11:
blobPhoto = (_d = (_e.sent())) !== null && _d !== void 0 ? _d : undefined;
return [3 /*break*/, 13];
case 12: return [3 /*break*/, 13];
case 13:
_i++;
return [3 /*break*/, 5];
case 14:
// save userinfo in cache
userInfo = tslib_1.__assign(tslib_1.__assign({}, usersResults), { userPhoto: blobPhoto, presence: undefined });
// return Userinfo with photo
setCacheValue("".concat(user), userInfo);
return [2 /*return*/, userInfo];
case 15:
error_2 = _e.sent();
// execute batch
console.log("[getUserById] error:", error_2);
return [3 /*break*/, 16];
case 16: return [2 /*return*/];
}
});
}); }, [graphClient, getCacheValue]);
var getUserPresence = React.useCallback(function (userObjectId) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var response, error_3;
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
if (!graphClient || !userObjectId)
return [2 /*return*/];
_b.label = 1;
case 1:
_b.trys.push([1, 4, , 5]);
return [4 /*yield*/, graphClient];
case 2: return [4 /*yield*/, ((_a = (_b.sent())) === null || _a === void 0 ? void 0 : _a.api("/users/".concat(userObjectId, "/presence")).get())];
case 3:
response = _b.sent();
if (response) {
return [2 /*return*/, response !== null && response !== void 0 ? response : undefined];
}
return [3 /*break*/, 5];
case 4:
error_3 = _b.sent();
console.log("[getUserPresence] error:", error_3);
throw new Error("Something went wrong when getting user presence");
case 5: return [2 /*return*/, undefined];
}
});
}); }, [graphClient]);
return { getUserById: getUserById, getUserByName: getUserByName, getUserPresence: getUserPresence };
};
exports.useGraphUserAPI = useGraphUserAPI;
//# sourceMappingURL=useGraphUserAPI.js.map