@sysdoc/sharepoint-utils
Version:
Sysdoc's core Sharepoint utilities
386 lines (385 loc) • 19.7 kB
JavaScript
"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;