@pnp/spfx-controls-react
Version:
Reusable React controls for SharePoint Framework solutions
238 lines • 13.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OneDriveService = void 0;
var tslib_1 = require("tslib");
var sp_http_1 = require("@microsoft/sp-http");
var FileBrowserService_1 = require("./FileBrowserService");
var GeneralHelper_1 = require("../common/utilities/GeneralHelper");
var OneDriveService = /** @class */ (function (_super) {
tslib_1.__extends(OneDriveService, _super);
function OneDriveService(context, itemsToDownloadCount) {
var _this = _super.call(this, context, itemsToDownloadCount) || this;
/**
* Gets files from OneDrive personal library
*/
_this.getListItems = function (listUrl, folderPath, acceptedFilesExtensions, nextPageQueryStringParams) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var filesQueryResult, oneDriveRootFolder, encodedListUrl, queryStringParams, encodedFolderPath, restApi, error_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
filesQueryResult = { items: [], nextHref: null };
_a.label = 1;
case 1:
_a.trys.push([1, 4, , 5]);
return [4 /*yield*/, this.getOneDriveRootFolderFullUrl()];
case 2:
oneDriveRootFolder = _a.sent();
encodedListUrl = encodeURIComponent(oneDriveRootFolder);
queryStringParams = "";
folderPath = folderPath ? folderPath : this.oneDriveRootFolderRelativeUrl;
encodedFolderPath = encodeURIComponent(folderPath);
if (nextPageQueryStringParams) {
// Remove start ? from the query params
if (nextPageQueryStringParams.charAt(0) === "?") {
nextPageQueryStringParams = nextPageQueryStringParams.substring(1);
}
queryStringParams = nextPageQueryStringParams;
}
else {
queryStringParams = "RootFolder=".concat(encodedFolderPath);
}
restApi = "".concat(this.context.pageContext.web.absoluteUrl, "/_api/SP.List.GetListDataAsStream?listFullUrl='").concat(encodedListUrl, "'&").concat(queryStringParams);
return [4 /*yield*/, this._getListDataAsStream(restApi, null, acceptedFilesExtensions)];
case 3:
filesQueryResult = _a.sent();
return [3 /*break*/, 5];
case 4:
error_1 = _a.sent();
filesQueryResult.items = null;
console.error(error_1 instanceof Error ? error_1.message : String(error_1));
return [3 /*break*/, 5];
case 5: return [2 /*return*/, filesQueryResult];
}
});
}); };
/**
* Downloads document content from OneDrive location.
*/
_this.downloadSPFileContent = function (absoluteFileUrl, fileName) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var urlTokens, fileUrl, fileInfoResult, fileInfo, oneDrvieFileUrl, fileDownloadResult, blob, err_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 5, , 6]);
urlTokens = absoluteFileUrl.split("/_api/");
fileUrl = "".concat(this.context.pageContext.web.absoluteUrl, "/_api/").concat(urlTokens[1], "?");
return [4 /*yield*/, this.context.spHttpClient.get(fileUrl, sp_http_1.SPHttpClient.configurations.v1)];
case 1:
fileInfoResult = _a.sent();
return [4 /*yield*/, fileInfoResult.json()];
case 2:
fileInfo = _a.sent();
oneDrvieFileUrl = fileInfo["@content.downloadUrl"];
return [4 /*yield*/, this.context.httpClient.get(oneDrvieFileUrl, sp_http_1.SPHttpClient.configurations.v1, {
headers: new Headers(),
method: 'GET',
mode: 'cors'
})];
case 3:
fileDownloadResult = _a.sent();
if (!fileDownloadResult || !fileDownloadResult.ok) {
throw new Error("Something went wrong when downloading the file. Status='".concat(fileDownloadResult.status, "'"));
}
return [4 /*yield*/, fileDownloadResult.blob()];
case 4:
blob = _a.sent();
return [2 /*return*/, GeneralHelper_1.GeneralHelper.getFileFromBlob(blob, fileName)];
case 5:
err_1 = _a.sent();
console.error("[OneDriveService.fetchFileContent] Err='".concat(err_1 instanceof Error ? err_1.message : String(err_1), "'"));
return [2 /*return*/, null];
case 6: return [2 /*return*/];
}
});
}); };
/**
* Gets users one drive personal documents library path
*/
_this.getOneDriveRootFolderFullUrl = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var oneDriveUrl, apiUrl, oneDriveFolderResult, oneDriveLibsData, isDefaultLang, myDocumentsLibrary, error_2;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 4, , 5]);
// Return result if already obtained
if (this.oneDriveRootFolderAbsoluteUrl) {
return [2 /*return*/, this.oneDriveRootFolderAbsoluteUrl];
}
return [4 /*yield*/, this.getOneDrivePersonalUrl()];
case 1:
oneDriveUrl = _a.sent();
if (!oneDriveUrl) {
throw new Error("Cannot obtain OneDrive personal URL.");
}
apiUrl = "".concat(this.context.pageContext.web.absoluteUrl, "/_api/SP.RemoteWeb(@a1)/Web/Lists?$filter=BaseTemplate eq 700 and BaseType eq 1&@a1='").concat(encodeURIComponent(oneDriveUrl), "'");
return [4 /*yield*/, this.context.spHttpClient.get(apiUrl, sp_http_1.SPHttpClient.configurations.v1, {
headers: {
"accept": "application/json;odata=nometadata",
"content-type": "application/json;odata=nometadata",
"odata-version": ""
}
})];
case 2:
oneDriveFolderResult = _a.sent();
if (!oneDriveFolderResult || !oneDriveFolderResult.ok) {
throw new Error("Something went wrong when executing oneDriveRootFolder retrieve request. Status='".concat(oneDriveFolderResult.status, "'"));
}
return [4 /*yield*/, oneDriveFolderResult.json()];
case 3:
oneDriveLibsData = _a.sent();
if (!oneDriveLibsData || !oneDriveLibsData.value || oneDriveLibsData.value.length === 0) {
throw new Error("Cannot read one drive libs data.");
}
isDefaultLang = this.isCurrentLanguageDefault();
myDocumentsLibrary = oneDriveLibsData.value[0];
this.oneDrivePersonalLibraryTitle = isDefaultLang ? myDocumentsLibrary.Title : myDocumentsLibrary.EntityTypeName;
this.oneDriveRootFolderRelativeUrl = "".concat(myDocumentsLibrary.ParentWebUrl, "/").concat(isDefaultLang ? myDocumentsLibrary.Title : myDocumentsLibrary.EntityTypeName);
this.oneDriveRootFolderAbsoluteUrl = "".concat(this.oneDrivePersonalUrl).concat(isDefaultLang ? myDocumentsLibrary.Title : myDocumentsLibrary.EntityTypeName);
return [3 /*break*/, 5];
case 4:
error_2 = _a.sent();
console.error("[FileBrowserService.getOneDrivePersonalUrl] Err='".concat(error_2 instanceof Error ? error_2.message : String(error_2), "'"));
this.oneDriveRootFolderAbsoluteUrl = null;
return [3 /*break*/, 5];
case 5: return [2 /*return*/, this.oneDriveRootFolderAbsoluteUrl];
}
});
}); };
/**
* Gets OneDrive RootFolder server relative URL.
*/
_this.getOneDriveRootFolderRelativeUrl = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!this.oneDriveRootFolderRelativeUrl) return [3 /*break*/, 2];
return [4 /*yield*/, this.getOneDriveRootFolderFullUrl()];
case 1:
_a.sent();
_a.label = 2;
case 2: return [2 /*return*/, this.oneDriveRootFolderRelativeUrl];
}
});
}); };
/**
* Gets OneDrive personal library Title
*/
_this.getOneDrivePersonalLibraryTitle = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!this.oneDrivePersonalLibraryTitle) return [3 /*break*/, 2];
return [4 /*yield*/, this.getOneDriveRootFolderFullUrl()];
case 1:
_a.sent();
_a.label = 2;
case 2: return [2 /*return*/, this.oneDrivePersonalLibraryTitle];
}
});
}); };
/**
* Gets personal site path.
*/
_this.getOneDrivePersonalUrl = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var userProfileApi, userProfileResult, profileData, error_3;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
// Return result if already obtained
if (this.oneDrivePersonalUrl) {
return [2 /*return*/, this.oneDrivePersonalUrl];
}
userProfileApi = "".concat(this.context.pageContext.web.absoluteUrl, "/_api/SP.UserProfiles.ProfileLoader.GetProfileLoader/GetUserProfile");
return [4 /*yield*/, this.context.spHttpClient.post(userProfileApi, sp_http_1.SPHttpClient.configurations.v1, {})];
case 1:
userProfileResult = _a.sent();
if (!userProfileResult || !userProfileResult.ok) {
throw new Error("Something went wrong when executing user profile request. Status='".concat(userProfileResult.status, "'"));
}
return [4 /*yield*/, userProfileResult.json()];
case 2:
profileData = _a.sent();
if (!profileData) {
throw new Error("Cannot read user profile data.");
}
this.oneDrivePersonalUrl = profileData.FollowPersonalSiteUrl;
return [3 /*break*/, 4];
case 3:
error_3 = _a.sent();
console.error("[FileBrowserService.getOneDrivePersonalUrl] Err='".concat(error_3 instanceof Error ? error_3.message : String(error_3), "'"));
this.oneDrivePersonalUrl = null;
return [3 /*break*/, 4];
case 4: return [2 /*return*/, this.oneDrivePersonalUrl];
}
});
}); };
/**
* Creates an absolute URL
*/
_this.buildAbsoluteUrl = function (relativeUrl) {
return "https://".concat(_this.oneDrivePersonalUrl.split("//")[1].split("/")[0]).concat(relativeUrl);
};
_this.oneDrivePersonalUrl = null;
_this.oneDriveRootFolderRelativeUrl = null;
_this.oneDriveRootFolderAbsoluteUrl = null;
_this.oneDrivePersonalLibraryTitle = null;
return _this;
}
/**
* Checks if the current language is default (en-US)
*/
OneDriveService.prototype.isCurrentLanguageDefault = function () {
return this.context.pageContext.cultureInfo.currentUICultureName === 'en-US';
};
return OneDriveService;
}(FileBrowserService_1.FileBrowserService));
exports.OneDriveService = OneDriveService;
//# sourceMappingURL=OneDriveService.js.map