UNPKG

@sysdoc/sharepoint-utils

Version:

Sysdoc's core Sharepoint utilities

386 lines (385 loc) 19.7 kB
"use strict"; /*! * Copyright Sysdoc @ 2019 */ var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SPBasicRestProvider = void 0; var all_1 = require("@pnp/sp-commonjs/presets/all"); var _ = require("lodash"); var PnPFieldType_1 = require("../jsom/PnPFieldType"); var fields_1 = require("../util/fields"); var SPBasicRestProvider = /** @class */ (function () { function SPBasicRestProvider(cfg) { var _a; this.includeFields = []; this.expandFields = []; this.additionalFields = []; this.listTitle = cfg.listTitle; this.web = all_1.Web(cfg.webUrl || _spPageContextInfo.webAbsoluteUrl); this.fields = cfg.fields || []; this.fieldPrefix = cfg.fieldPrefix || null; this.contentTypeId = cfg.contentTypeId; this.includeFields = ["ContentType"]; if (cfg.includeFields && cfg.includeFields.length) { (_a = this.includeFields).push.apply(_a, cfg.includeFields); } this.expandFields = cfg.expandFields || this.expandFields; this.additionalFields = cfg.additionalFields || this.additionalFields; this._ready = this.getSchema(); } SPBasicRestProvider.prototype.toItem = function (item) { var obj = {}; for (var key in this.schema) { if (this.schema.hasOwnProperty(key)) { obj[key] = fields_1.getRestFieldValueByType(item, this.schema[key].InternalName, PnPFieldType_1.PnPFieldType[this.schema[key].TypeAsString]); } } return obj; }; SPBasicRestProvider.prototype.getSchema = function () { var _this = this; return this.whenReady().then(function () { return _this.schema; }); }; SPBasicRestProvider.prototype.whenReady = function () { var _this = this; if (this._ready) { return this._ready; } return this.web.lists .getByTitle(this.listTitle) .get() .then(function (e) { _this.listTitle = e.Title; return _this.web.lists .getByTitle(e.Title) .fields .get() .then(function (event) { return _this.createSchemaFromFields(event); }); }); }; SPBasicRestProvider.prototype.createSchemaFromFields = function (fields) { this.includeFields.push("ID", "Title", "Created", "Modified", "Author"); this.fields = []; this.includeFields = _.uniq(this.includeFields); var schema = {}; for (var _i = 0, fields_2 = fields; _i < fields_2.length; _i++) { var field = fields_2[_i]; if (!this.fieldPrefix || (this.fieldPrefix && (_.startsWith(field.InternalName, this.fieldPrefix) || _.indexOf(this.includeFields, field.InternalName)) > -1)) { schema[fields_1.prepareFieldInternalName(field.InternalName, this.fieldPrefix)] = field; switch (field.TypeAsString) { case PnPFieldType_1.PnPFieldType.User: case PnPFieldType_1.PnPFieldType.UserMulti: this.fields.push(field.InternalName + "/Id"); this.fields.push(field.InternalName + "/EMail"); this.fields.push(field.InternalName + "/Title"); this.expandFields.push(field.InternalName); // tslint:disable-next-line: no-switch-case-fall-through case PnPFieldType_1.PnPFieldType.Lookup: case PnPFieldType_1.PnPFieldType.LookupMulti: this.fields.push(field.InternalName + "/Id"); this.fields.push(field.InternalName + "/Title"); this.expandFields.push(field.InternalName); // tslint:disable-next-line: no-switch-case-fall-through default: break; } this.fields.push("" + field.InternalName); } } this.fields = _.uniq(this.fields); this.expandFields = _.uniq(this.expandFields); this.schema = schema; return schema; }; SPBasicRestProvider.prototype.itemToRest = function (item) { var obj = {}; for (var key in this.schema) { obj[key] = fields_1.setRestFieldValueByType(item, key, PnPFieldType_1.PnPFieldType[this.schema[key].TypeAsString]); } return obj; }; // tslint:disable-next-line: cyclomatic-complexity SPBasicRestProvider.prototype.prepareObject = function (obj) { var dict = {}; dict['ID'] = obj.id; for (var key in this.schema) { var def = this.schema[key]; var value = obj[key]; if (typeof value !== "undefined") { if (this.schema[key].Id !== "__ATTACH__") { if (!value && value !== 0) { dict[def.InternalName] = ""; } else { if (def.TypeAsString === PnPFieldType_1.PnPFieldType.DateTime) { dict[def.InternalName] = new Date(value).format("MM/dd/yyyy"); } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldType || def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti) { if (value && value.map) { dict[def.InternalName + "TaxHTField"] = value .map(function (e) { return e.label + "|" + e.id; }) .join(";"); } else { dict[def.InternalName] = value && value.id ? { "__metadata": { "type": "SP.Taxonomy.TaxonomyFieldValue" }, "Label": value.label, "TermGuid": value.id, "WssId": "-1" } : null; } } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.User || def.TypeAsString === PnPFieldType_1.PnPFieldType.UserMulti) { var isMulti = def.TypeAsString === PnPFieldType_1.PnPFieldType.UserMulti || def.AllowMultipleValues; if (value && value.map && value.length) { dict[def.InternalName + "Id"] = { results: value.map(function (user) { return user.id; }) }; } else { dict[def.InternalName + "Id"] = value && !isMulti ? value.id : null; } } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.Lookup || def.TypeAsString === PnPFieldType_1.PnPFieldType.LookupMulti) { var isMulti = def.TypeAsString === PnPFieldType_1.PnPFieldType.LookupMulti || def.AllowMultipleValues; if (value && value.map && value.length) { dict[def.InternalName + "Id"] = { results: value.map(function (user) { return user.id; }) }; } else { dict[def.InternalName + "Id"] = value && !isMulti ? value.id : null; } // tslint:disable-next-line: prefer-conditional-expression } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.MultiChoice) { dict[def.InternalName] = value ? { '__metadata': { 'type': 'Collection(Edm.String)' }, results: value } : null; } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.URL) { dict[def.InternalName] = value.replace("|", ","); } else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.Number) { dict[def.InternalName] = value; } else { // tslint:disable-next-line: restrict-plus-operands dict[def.InternalName] = value + ""; } } } } } return dict; }; SPBasicRestProvider.prototype.create = function (obj) { var list = this.web.lists.getByTitle(this.listTitle); var item = this.prepareObject(obj); return list.items.add(__assign(__assign({}, item), { ContentTypeId: this.contentTypeId })); }; SPBasicRestProvider.prototype.update = function (obj) { var list = this.web.lists.getByTitle(this.listTitle); var item = this.prepareObject(obj); return list.items.getById(obj.id).update(item); }; SPBasicRestProvider.prototype.updateBatch = function (objs, updateKeys) { var _this = this; var list = this.web.lists.getByTitle(this.listTitle); return list.getListItemEntityTypeFullName().then(function (entityTypeFullName) { var batch = _this.web.createBatch(); var items = objs.map(function (obj) { return _this.prepareObject(obj); }); var _loop_1 = function (item) { var properties = {}; if (updateKeys) { updateKeys.forEach(function (key) { properties[key] = item[key]; }); } else { for (var k in item) { if (item[k] !== null) { properties[k] = item[k]; // @TODO To Validate } } } list.items .getById(item.id) .inBatch(batch) .update(properties, "*", entityTypeFullName); }; for (var _i = 0, items_1 = items; _i < items_1.length; _i++) { var item = items_1[_i]; _loop_1(item); } // tslint:disable-next-line: no-console return batch.execute().then(function (d) { return console.log("Done"); }); }); }; SPBasicRestProvider.prototype.delete = function (key) { var list = this.web.lists.getByTitle(this.listTitle); return list.items.getById(key).delete(); }; SPBasicRestProvider.prototype.deleteBatch = function (keys) { var list = this.web.lists.getByTitle(this.listTitle); var batch = this.web.createBatch(); for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) { var key = keys_1[_i]; list.items .getById(key) .inBatch(batch) .delete(); } // tslint:disable-next-line: no-console return batch.execute().then(function (d) { return console.log("Done"); }); }; SPBasicRestProvider.prototype.getAll = function () { var list = this.web.lists.getByTitle(this.listTitle); return this._ready.then(function () { return new Promise(function (resolve, reject) { return __awaiter(this, void 0, void 0, function () { var _items, _allItems, err_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 5, , 6]); return [4 /*yield*/, list.items.getPaged()]; case 1: _items = _a.sent(); _allItems = _items.results; _a.label = 2; case 2: if (!_items.hasNext) return [3 /*break*/, 4]; return [4 /*yield*/, _items.getNext()]; case 3: _items = _a.sent(); _allItems = _allItems.concat(_items.results); return [3 /*break*/, 2]; case 4: resolve(_allItems); return [3 /*break*/, 6]; case 5: err_1 = _a.sent(); reject(err_1); return [3 /*break*/, 6]; case 6: return [2 /*return*/]; } }); }); }); }); }; SPBasicRestProvider.prototype.getByQuery = function (filter, config) { var list = this.web.lists.getByTitle(this.listTitle); // tslint:disable-next-line: no-this-assignment var provider = this; return this._ready.then(function () { return new Promise(function (resolve, reject) { return __awaiter(this, void 0, void 0, function () { var query, _items, _allItems, _transformedItems, err_2; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 5, , 6]); query = list.items; if (config && config.limit) { query = query.top(config.limit); } query = query.select(provider.fields.concat(provider.additionalFields).join(",")); if (config && config.orderBy && config.orderBy.field) { query = query.orderBy(config.orderBy.field, config.orderBy.sortAsc ? true : false); } if (provider.expandFields && provider.expandFields.length) { query = query.expand(provider.expandFields.join(",")); } return [4 /*yield*/, query.filter(filter).getPaged()]; case 1: _items = _a.sent(); _allItems = _items.results; _a.label = 2; case 2: if (!_items.hasNext) return [3 /*break*/, 4]; return [4 /*yield*/, _items.getNext()]; case 3: _items = _a.sent(); _allItems = _allItems.concat(_items.results); return [3 /*break*/, 2]; case 4: _transformedItems = _allItems.map(function (e) { return provider.toItem(e); }); resolve(_transformedItems); return [3 /*break*/, 6]; case 5: err_2 = _a.sent(); reject(err_2); return [3 /*break*/, 6]; case 6: return [2 /*return*/]; } }); }); }); }); }; SPBasicRestProvider.prototype.get = function (key) { var list = this.web.lists.getByTitle(this.listTitle); return list.items.getById(key).get(); }; return SPBasicRestProvider; }()); exports.SPBasicRestProvider = SPBasicRestProvider;