@sysdoc/sharepoint-utils
Version:
Sysdoc's core Sharepoint utilities
1,016 lines (1,015 loc) • 67.7 kB
JavaScript
"use strict";
/*!
* Copyright Sysdoc @ 2019
*/
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 };
}
};
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SPListProvider = exports.getSPValue = exports.DefaultReadOnlyFields = void 0;
var sp_commonjs_1 = require("@pnp/sp-commonjs");
var all_1 = require("@pnp/sp-commonjs/presets/all");
var date_fns_1 = require("date-fns");
var _ = require("lodash");
var errorcodes_1 = require("../util/errorcodes");
var executor_1 = require("../util/executor");
var fields_1 = require("../util/fields");
var files_1 = require("../util/files");
var PnPFieldType_1 = require("./PnPFieldType");
var SPDefaultFieldsFilterStrategy_1 = require("./SPDefaultFieldsFilterStrategy");
exports.DefaultReadOnlyFields = ["ID", "Author", "Editor", "FileRef", "FileDirRef", "Created", "Modified"];
function handleSPError(errorCode, ctx, list, delegate, resolve) {
if (delegate) {
switch (errorCode) {
case errorcodes_1.SPErrorCode.InvalidFieldValue:
if (delegate.onInvalidFieldValue) {
// @ts-ignore
resolve(delegate.onInvalidFieldValue(ctx, list, null, this));
return true;
}
break;
case errorcodes_1.SPErrorCode.FieldValueFailedValidation:
if (delegate.onFieldValueFailedValidation) {
// @ts-ignore
resolve(delegate.onFieldValueFailedValidation(ctx, list, null, this));
return true;
}
break;
case errorcodes_1.SPErrorCode.ItemValueFailedValidation:
if (delegate.onItemValueFailedValidation) {
// @ts-ignore
resolve(delegate.onItemValueFailedValidation(ctx, list, null, this));
return true;
}
break;
case errorcodes_1.SPErrorCode.AccessDenied:
if (delegate.onAccessDenied) {
// @ts-ignore
resolve(delegate.onAccessDenied(ctx, list, null, this));
return true;
}
break;
case errorcodes_1.SPErrorCode.VersionConflict:
if (delegate.onVersionConflict) {
// @ts-ignore
resolve(delegate.onVersionConflict(ctx, list, null, this));
return true;
}
break;
default:
break;
}
}
return false;
}
function getFieldValue(fieldDef, fieldValues, item) {
var internalName = fieldDef.InternalName;
var value = fieldValues[internalName];
switch (fieldDef.TypeAsString) {
case PnPFieldType_1.PnPFieldType.Attachments:
try {
return item.get_attachmentFiles().get_data().map(function (e) {
return {
url: e.get_path(),
name: e.get_fileName()
};
});
}
catch (err) {
return [];
}
case PnPFieldType_1.PnPFieldType.Guid:
return value.toString();
case PnPFieldType_1.PnPFieldType.URL:
return value ? value.get_url() + "|" + value.get_description() : "";
case PnPFieldType_1.PnPFieldType.User:
case PnPFieldType_1.PnPFieldType.UserMulti:
if (fieldDef.AllowMultipleValues) {
return fields_1.userMultiValueToObjects(value);
}
return fields_1.userValueToObject(value);
case PnPFieldType_1.PnPFieldType.TaxonomyFieldType:
case PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti:
if (fieldDef.AllowMultipleValues) {
return fields_1.multiTaxonomyFieldToObjects(value);
}
return fields_1.taxonomyFieldToObject(value);
case PnPFieldType_1.PnPFieldType.Lookup:
case PnPFieldType_1.PnPFieldType.LookupMulti:
if (fieldDef.AllowMultipleValues) {
return fields_1.lookupMultiValueToObjects(value);
}
return fields_1.lookupValueToObject(value);
case PnPFieldType_1.PnPFieldType.Boolean:
case PnPFieldType_1.PnPFieldType.Counter:
case PnPFieldType_1.PnPFieldType.DateTime:
case PnPFieldType_1.PnPFieldType.Computed:
case PnPFieldType_1.PnPFieldType.HTML:
case PnPFieldType_1.PnPFieldType.Text:
case PnPFieldType_1.PnPFieldType.Note:
case PnPFieldType_1.PnPFieldType.Number:
case PnPFieldType_1.PnPFieldType.Integer:
case PnPFieldType_1.PnPFieldType.Choice:
case PnPFieldType_1.PnPFieldType.MultiChoice:
case PnPFieldType_1.PnPFieldType.Image:
default:
return value;
}
}
function getSPValue(def, item, value, ctx, list) {
switch (def.TypeAsString) {
case PnPFieldType_1.PnPFieldType.Guid:
return new SP.Guid(value);
case PnPFieldType_1.PnPFieldType.URL:
var url = new SP.FieldUrlValue();
var vals = value.split("|");
if (vals.length === 1) {
return null;
}
url.set_url(vals[0]);
url.set_description(vals[1]);
return url;
case PnPFieldType_1.PnPFieldType.User:
case PnPFieldType_1.PnPFieldType.UserMulti:
if (def.AllowMultipleValues) {
var v = value ? (value.length ? value : (value.id ? [value] : [])) : [];
return fields_1.createMultiUserValue(v);
}
return fields_1.createUserValue(value);
case PnPFieldType_1.PnPFieldType.TaxonomyFieldType:
case PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti:
var taxField = ctx.castTo(list
.get_fields()
.getByInternalNameOrTitle(def.InternalName), SP.Taxonomy.TaxonomyField);
if (def.AllowMultipleValues) {
var val = fields_1.createMultiTaxonomyValue(ctx, taxField, value);
if (val) {
taxField.setFieldValueByValueCollection(item, val);
}
return val;
}
var vv = fields_1.createTaxonomyValue(value);
if (vv) {
taxField.setFieldValueByValue(item, vv);
}
return vv;
case PnPFieldType_1.PnPFieldType.Lookup:
case PnPFieldType_1.PnPFieldType.LookupMulti:
if (def.AllowMultipleValues) {
return fields_1.createMultiLookupFieldValue(value);
}
return fields_1.createLookupFieldValue(value);
case PnPFieldType_1.PnPFieldType.Boolean:
case PnPFieldType_1.PnPFieldType.Counter:
case PnPFieldType_1.PnPFieldType.DateTime:
case PnPFieldType_1.PnPFieldType.Computed:
case PnPFieldType_1.PnPFieldType.HTML:
case PnPFieldType_1.PnPFieldType.Text:
case PnPFieldType_1.PnPFieldType.Note:
case PnPFieldType_1.PnPFieldType.Number:
case PnPFieldType_1.PnPFieldType.Integer:
case PnPFieldType_1.PnPFieldType.Choice:
case PnPFieldType_1.PnPFieldType.MultiChoice:
case PnPFieldType_1.PnPFieldType.Image:
default:
return value;
}
}
exports.getSPValue = getSPValue;
// tslint:disable-next-line: cyclomatic-complexity
function getFormValue(field, def, isOnline) {
if (isOnline === void 0) { isOnline = false; }
switch (def.TypeAsString) {
case PnPFieldType_1.PnPFieldType.Attachments:
return (field.value);
case PnPFieldType_1.PnPFieldType.User:
case PnPFieldType_1.PnPFieldType.UserMulti:
if (isOnline) {
if (def.AllowMultipleValues) {
// @ts-ignore
return JSON.stringify(field.value && field.value.length ? field.value.map(function (field) {
return { "Key": field.payload.LoginName };
}) : []);
}
return field.value && field.value.length ? JSON.stringify([{ "Key": field.value[0].payload.LoginName }]) : null;
}
else {
if (def.AllowMultipleValues) {
// @ts-ignore
return { results: field.value && field.value.length ? field.value.map(function (field) { return field.id; }) : [] };
}
return field.value && field.value.length ? field.value[0].id : null;
}
case PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti:
// @ts-ignore
return field.value && field.value.length ? field.value.map(function (field) { return field.label + "|" + field.id; }).join(';#') : null;
case PnPFieldType_1.PnPFieldType.TaxonomyFieldType:
if (isOnline) {
// @ts-ignore
return field.value && field.value.length ? field.value[0].label + "|" + field.value[0].id : null;
}
else {
// @ts-ignore
return field.value && field.value.length ? {
"__metadata": { "type": "SP.Taxonomy.TaxonomyFieldValue" },
"Label": field.value[0].label,
"TermGuid": field.value[0].id,
"WssId": "-1"
} : null;
}
case PnPFieldType_1.PnPFieldType.Lookup:
case PnPFieldType_1.PnPFieldType.LookupMulti:
if (def.AllowMultipleValues) {
// @ts-ignore
return { results: field.value && field.value.length ? field.value.map(function (field) { return field.id; }) : [] };
}
return field.value && field.value.length ? field.value[0].id : null;
case PnPFieldType_1.PnPFieldType.DateTime:
return (field.value && new Date(field.value)) || null;
case PnPFieldType_1.PnPFieldType.Choice:
return (field.value && field.value.id) || null;
case PnPFieldType_1.PnPFieldType.MultiChoice:
return field.value && field.value.length ? {
'__metadata': { 'type': 'Collection(Edm.String)' },
results: field.value
} : null;
case PnPFieldType_1.PnPFieldType.Image:
case PnPFieldType_1.PnPFieldType.Computed:
case PnPFieldType_1.PnPFieldType.HTML:
case PnPFieldType_1.PnPFieldType.Text:
case PnPFieldType_1.PnPFieldType.Note:
case PnPFieldType_1.PnPFieldType.Number:
case PnPFieldType_1.PnPFieldType.Integer:
case PnPFieldType_1.PnPFieldType.Boolean:
case PnPFieldType_1.PnPFieldType.Guid:
case PnPFieldType_1.PnPFieldType.URL:
case PnPFieldType_1.PnPFieldType.Counter:
default:
return field.value;
}
}
function defaultItemCreationStrategy(obj, folderStraregy) {
return __awaiter(this, void 0, void 0, function () {
var itemInfo, folder, ff, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
itemInfo = new SP.ListItemCreationInformation();
folder = "";
_a.label = 1;
case 1:
_a.trys.push([1, 4, , 5]);
if (!folderStraregy) return [3 /*break*/, 3];
return [4 /*yield*/, folderStraregy(obj)];
case 2:
ff = _a.sent();
if (typeof ff === "string") {
folder = ff;
}
else if (typeof ff === "object" && ff && ff.get_serverRelativeUrl) {
folder = ff.get_serverRelativeUrl();
}
_a.label = 3;
case 3: return [3 /*break*/, 5];
case 4:
err_1 = _a.sent();
console.error(err_1);
return [3 /*break*/, 5];
case 5:
if (folder) {
itemInfo.set_folderUrl(folder);
}
return [2 /*return*/, itemInfo];
}
});
});
}
var SPListProvider = /** @class */ (function () {
function SPListProvider(cfg) {
var _a;
sp_commonjs_1.sp.setup({
sp: {
headers: {
Accept: "application/json;odata=verbose",
}
}
});
this.listTitle = cfg.listTitle;
this.listId = cfg.listId;
this.webUrl = cfg.webUrl || _spPageContextInfo.webAbsoluteUrl;
this.logger = cfg.logger;
this.baseContentType = cfg.baseContentType;
this.includeFields = ["ContentType"];
if (cfg.includeFields && cfg.includeFields.length) {
(_a = this.includeFields).push.apply(_a, cfg.includeFields);
}
this.itemCreationStrategy = cfg.itemCreationStrategy || defaultItemCreationStrategy;
this.folderCreationStrategy = cfg.folderCreationStrategy;
this.webId = cfg.webId || null;
this.supportsAttachments = cfg.supportsAttachments;
if (this.supportsAttachments) {
this.includeFields.push("AttachmentFiles");
}
this.fieldSerializers = cfg.fieldsSerializers;
this.fieldDecorators = cfg.fieldsDecorators || {};
this.filterStrategy = cfg.fieldsFilterStrategy || (cfg.fields ? null : new SPDefaultFieldsFilterStrategy_1.SPDefaultFieldsFilterStrategy());
this.fields = cfg.fields;
this.isOnPrem = cfg.isOnPrem || false;
this._ready = this.getSchema();
}
SPListProvider.prototype.createSchemaFromFields = function (fields) {
var _this = this;
var filterStrategy = this.filterStrategy;
if (this.supportsAttachments) {
fields.push({
TypeAsString: "Attachments",
Title: "Attachments",
AllowMultipleValues: true,
InternalName: "KPAttachments",
Hidden: false,
Id: "__ATTACH__"
});
}
this.includeFields.push("ID", "Title", "Created", "Modified", "Author", "FileRef", "FileDirRef", "FileLeafRef", "Comments");
var sFields = this.fields;
if (filterStrategy) {
this.schema = _(fields.filter(function (ff) {
return filterStrategy.filter(ff);
}))
.keyBy(function (e) {
if (e.InternalName !== "KPAttachments") {
if (!e.Hidden) {
_this.includeFields.push(e.InternalName);
}
}
return fields_1.prepareFieldInternalName(e.InternalName, /KP([A-Z][\S]+)$/, "$1");
})
.value();
return;
}
this.includeFields = _.uniq(this.includeFields);
var schema = {};
fields.forEach(function (field) {
if (sFields[field.InternalName]) {
schema[sFields[field.InternalName]] = field;
}
});
var schemaKeys = Object.keys(schema);
var sFieldsKeys = Object.keys(sFields).map(function (e) { return sFields[e]; });
var diff = _.difference(sFieldsKeys, schemaKeys);
if (diff.length) {
this.logger.logInfo("creating schema for " + this.listTitle, "Could not find the following fields " + diff.join(", ") + " on list");
}
this.schema = schema;
return schema;
};
SPListProvider.prototype.getObjectFromFields = function (fields) {
var _this = this;
var obj = {};
fields.forEach(function (e) {
if (e.key !== 'contentType') {
var field = _this.schema[e.key];
if (field) {
if (_this.schema[e.key].Id === "__ATTACH__") {
obj.pendingAttachments = e.value;
return;
}
if (e.key !== "referenceNumber" && e.key !== "documentId") {
// Taxonomy Field Type
if (e.type === 8) {
if (field.TypeAsString == PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti) {
obj[field.InternalName + "TaxHTField"] = getFormValue(e, field);
}
else {
obj[field.InternalName] = getFormValue(e, field);
}
}
else if (e.type === 11) {
// User Field Type
obj[field.InternalName + "Id"] = getFormValue(e, field);
}
else {
obj[field.InternalName] = getFormValue(e, field);
}
}
}
}
else {
obj["ContentTypeId"] = e.value.id;
}
});
return obj;
};
SPListProvider.prototype.getObjectFromFieldsOnline = function (fields) {
var _this = this;
var obj = [];
fields.forEach(function (e) {
if (e.key !== 'contentType') {
var field = _this.schema[e.key];
if (field) {
if (_this.schema[e.key].Id === "__ATTACH__") {
return { pendingAttachments: e.value };
}
if (e.key !== "referenceNumber" && e.key !== "documentId") {
// Taxonomy Field Type
if (e.type === 8) {
if (field.TypeAsString == PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti) {
obj.push({
FieldName: field.InternalName + "TaxHTField", FieldValue: getFormValue(e, field)
});
}
else {
obj.push({
FieldName: field.InternalName, FieldValue: getFormValue(e, field, true)
});
}
}
else if (e.type === 11) {
// Lookup Field Type
obj.push({
FieldName: field.InternalName, FieldValue: getFormValue(e, field, true)
});
}
else {
obj.push({
FieldName: field.InternalName, FieldValue: getFormValue(e, field)
});
}
}
}
}
else {
obj.push({
FieldName: "ContentTypeId", FieldValue: e.value.id
});
}
});
return obj;
};
SPListProvider.prototype.getFormValuesFromFields = function (fields) {
var _this = this;
var result = [];
fields.forEach(function (e) {
var field = _this.schema[e.key];
if (field) {
var value_1 = "";
switch (field.TypeAsString) {
case PnPFieldType_1.PnPFieldType.User:
case PnPFieldType_1.PnPFieldType.UserMulti:
if (e.value && e.value.length > 0) {
var users_1 = [];
value_1 = "[";
e.value.forEach(function (v) { return users_1.push("{\"Key\":\"" + v.payload["LoginName"] + "\"}"); });
value_1 += users_1.join(",") + "]";
}
break;
case PnPFieldType_1.PnPFieldType.TaxonomyFieldType:
case PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti:
if (e.value && e.value.length > 0) {
e.value.forEach(function (v) {
value_1 += v.label + "|" + v.id + ";";
});
}
break;
case PnPFieldType_1.PnPFieldType.Lookup:
if (e.value && e.value.length > 0) {
value_1 = e.value[0].id + "";
}
break;
case PnPFieldType_1.PnPFieldType.LookupMulti:
if (e.value && e.value.length > 0) {
value_1 = e.value.map(function (id) { return id + ";#"; }).join(";#");
}
break;
case PnPFieldType_1.PnPFieldType.Choice:
if (e.value) {
value_1 = e.value.id;
}
break;
case PnPFieldType_1.PnPFieldType.MultiChoice:
if (e.value && e.value.length > 0) {
value_1 = e.value.map(function (v) { return v; }).join(";#");
}
break;
case PnPFieldType_1.PnPFieldType.DateTime:
if (e.value) {
value_1 = date_fns_1.format(new Date(e.value), "dd/MM/yyyy");
}
break;
default:
if (e.value) {
value_1 = getFormValue(e, field) + "";
}
break;
}
var obj = {
FieldName: e.key !== "contentType" ? field.InternalName : field.InternalName + "Id",
FieldValue: e.key !== "contentType" ? value_1 : e.value,
};
result.push(obj);
}
});
return result;
};
SPListProvider.prototype.itemToJson = function (item) {
var fields = item.get_fieldValues();
var schema = this.schema;
var obj = {};
for (var key in schema) {
if (Object.hasOwnProperty.call(schema, key)) {
var fv = getFieldValue(schema[key], fields, item);
if (this.fieldSerializers) {
if (this.fieldSerializers[key] && this.fieldSerializers[key].toJson) {
fv = this.fieldSerializers[key].toJson(item, fv);
}
}
obj[key] = fv;
}
}
obj.author = fields_1.userValueToObject(fields.Author);
obj.editor = fields_1.userValueToObject(fields.Editor);
obj.fileRef = fields.FileRef;
obj.fileDirRef = fields.FileDirRef;
obj.moderationStatus = fields._ModerationStatus;
obj.pendingAttachments = [];
obj.version = +item.get_objectVersion();
obj.attachments = [];
if (this.supportsAttachments) {
try {
obj.attachments = item.get_attachmentFiles().get_data().map(function (e) {
return {
name: e.get_fileName(),
url: e.get_serverRelativeUrl()
};
});
}
catch (err) {
console.error(err);
}
}
obj.created = fields.Created;
obj.modified = fields.Modified;
obj.dirty = fields._Dirty;
obj.likeCount = fields._likeCount;
obj.id = fields.ID;
obj.title = fields.Title;
return obj;
};
// tslint:disable-next-line: cyclomatic-complexity
SPListProvider.prototype.serializeItem = function (json) {
var dict = {};
var schema = this.schema;
var key = null;
for (key in schema) {
var def = schema[key];
var value = json[key];
if (typeof value !== "undefined") {
if (this.fieldSerializers) {
if (this.fieldSerializers[key] && this.fieldSerializers[key].fromJson) {
value = this.fieldSerializers[key].fromJson(json, value);
}
}
if (schema[key].Id !== "__ATTACH__" &&
schema[key].Id !== "referenceNumber" &&
schema[key].Id !== "documentId") {
if (!value) {
dict[def.InternalName] = "";
}
else {
if (def.TypeAsString === PnPFieldType_1.PnPFieldType.DateTime) {
dict[def.InternalName] = new Date(value).format("dd/MM/yyyy");
}
else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldType ||
def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti) {
if (value && value.map) {
dict[def.InternalName] = value.map(function (e) { return e.label + "|" + e.id; }).join(";");
}
else {
dict[def.InternalName] = value.label + "|" + value.id;
}
}
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] = JSON.stringify(value.map(function (e) {
return { Key: "i:0#.f|membership|" + e.email };
}));
}
else {
if (value && !isMulti) {
dict[def.InternalName] = JSON.stringify([{ Key: "i:0#.f|membership|" + value.email }]);
}
else {
dict[def.InternalName] = null;
}
}
}
else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.URL) {
dict[def.InternalName] = value.replace("|", ",");
}
else {
dict[def.InternalName] = value + "";
}
}
}
}
}
return dict;
};
// tslint:disable-next-line: cyclomatic-complexity
SPListProvider.prototype.serializeItemFormValues = function (json) {
var dict = [];
var schema = this.schema;
var key = null;
for (key in schema) {
var def = schema[key];
var value = json[key];
var fv = new SP.ListItemFormUpdateValue();
fv.set_fieldName(def.InternalName);
if (typeof value !== "undefined") {
if (this.fieldSerializers) {
if (this.fieldSerializers[key] && this.fieldSerializers[key].fromJson) {
value = this.fieldSerializers[key].fromJson(json, value);
}
}
if (schema[key].Id !== "__ATTACH__" &&
schema[key].Id !== "referenceNumber" &&
schema[key].Id !== "documentId") {
if (typeof value === "undefined" || value === null) {
fv.set_fieldValue("");
}
else {
if (def.TypeAsString === PnPFieldType_1.PnPFieldType.DateTime) {
fv.set_fieldValue(new Date(value).format("dd/MM/yyyy"));
}
else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldType ||
def.TypeAsString === PnPFieldType_1.PnPFieldType.TaxonomyFieldTypeMulti) {
if (value && value.map) {
fv.set_fieldValue(value.map(function (e) { return e.label + "|" + e.id; }).join(";"));
}
else {
fv.set_fieldValue(value.label + "|" + value.id);
}
}
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) {
fv.set_fieldValue(JSON.stringify(value.map(function (e) {
return { Key: "i:0#.f|membership|" + e.email };
})));
}
else {
if (value && !isMulti) {
fv.set_fieldValue(JSON.stringify([{ Key: "i:0#.f|membership|" + value.email }]));
}
else {
fv.set_fieldValue("");
}
}
}
else if (def.TypeAsString === PnPFieldType_1.PnPFieldType.URL) {
fv.set_fieldValue(value.replace("|", ","));
}
else {
fv.set_fieldValue(value + "");
}
}
dict.push(fv);
}
}
}
return dict;
};
SPListProvider.prototype.jsonToItem = function (json, item) {
var schema = this.schema;
var key = null;
for (key in schema) {
var def = schema[key];
var value = json[key];
if (typeof value !== "undefined") {
if (this.fieldSerializers) {
if (this.fieldSerializers[key] && this.fieldSerializers[key].fromJson) {
value = this.fieldSerializers[key].fromJson(json, value);
}
}
if (schema[key].Id !== "__ATTACH__") {
if (schema[key].Id !== "referenceNumber" &&
schema[key].Id !== "documentId") {
item.set_item(def.InternalName, getSPValue(def, item, value, item.get_context(), item.get_parentList()));
}
}
}
}
return item;
};
SPListProvider.prototype.whenReady = function () {
var _this = this;
if (this._ready) {
return this._ready;
}
var w = null;
var p = null;
if (this.webId) {
p = sp_commonjs_1.sp.site.openWebById(this.webId);
}
else if (this.webUrl) {
w = all_1.Web(this.webUrl);
this.$pnpWeb = w;
}
return this._ready = new Promise(function (res) {
if (p) {
return res(p.then(function (w) {
_this.webId = w.data.Id;
_this.webUrl = w.data.Url;
_this.loadedWeb = w.data;
_this.$pnpWeb = w.web;
return w.web;
}));
}
return res(w);
})
.then(function (w) {
var cachedList = localStorage.getItem("Lists." + _this.webUrl + "." + (_this.listId || _this.listTitle));
var listPromise = null;
listPromise = cachedList ? new Promise(function (res) {
res(JSON.parse(cachedList));
}) : (_this.listId ? w.lists.getById(_this.listId) : w.lists.getByTitle(_this.listTitle))
.get();
return listPromise.then(function (e) {
localStorage.setItem("Lists." + _this.webUrl + "." + (_this.listId || _this.listTitle), JSON.stringify({ Id: e.Id, Title: e.Title }));
var list = e;
_this.listTitle = e.Title;
_this.$pnpList = e;
var fields = localStorage.getItem("Lists." + e.Id + ".Fields");
if (!fields) {
if (_this.baseContentType) {
return w.lists.getByTitle(e.Title)
.contentTypes
.filter("Name eq '" + _this.baseContentType + "'")
.expand("Fields")
.get()
.then(function (e) { return e.length ? e[0].Fields : w.lists.getByTitle(e.Title)
.fields
.get(); })
.then(function (e) {
e.forEach(function (f) {
delete f["odata.type"];
delete f["odata.id"];
delete f["odata.editLink"];
delete f["odata.etag"];
delete f["odata.metadata"];
});
localStorage.setItem("Lists." + list.Id + ".Fields", JSON.stringify(e));
return _this.createSchemaFromFields(e);
});
}
return w.lists.getByTitle(e.Title)
.fields
.get()
.then(function (e) {
e.forEach(function (f) {
delete f["odata.type"];
delete f["odata.id"];
delete f["odata.etag"];
delete f["odata.editLink"];
delete f["odata.metadata"];
});
localStorage.setItem("Lists." + list.Id + ".Fields", JSON.stringify(e));
return _this.createSchemaFromFields(e);
});
}
else {
return _this.createSchemaFromFields(JSON.parse(fields));
}
});
});
};
SPListProvider.prototype.onAddAttachment = function (item, file) {
var _this = this;
var exec = executor_1.asyncListExecutor(this.webUrl, this.listTitle);
return exec(function (err, ctx, web, list, res, rej) { return __awaiter(_this, void 0, void 0, function () {
var content, w, a, err_2, a, err_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!!err) return [3 /*break*/, 10];
return [4 /*yield*/, files_1.getFileContentAsBuffer(file)];
case 1:
content = _a.sent();
w = all_1.Web(location.protocol + "//" + location.host + list.get_parentWebUrl());
_a.label = 2;
case 2:
_a.trys.push([2, 4, , 9]);
return [4 /*yield*/, w.lists.getByTitle(this.listTitle)
.items.getById(item.get_id())
.attachmentFiles
.add(file.name, content)];
case 3:
a = _a.sent();
res(a);
return [3 /*break*/, 9];
case 4:
err_2 = _a.sent();
_a.label = 5;
case 5:
_a.trys.push([5, 7, , 8]);
return [4 /*yield*/, w.lists.getByTitle(this.listTitle)
.items.getById(item.get_id())
.attachmentFiles
.add((Date.now()).toString() + "_" + file.name, content)];
case 6:
a = _a.sent();
res(a);
return [3 /*break*/, 8];
case 7:
err_3 = _a.sent();
rej(err_3);
return [3 /*break*/, 8];
case 8: return [3 /*break*/, 9];
case 9: return [2 /*return*/];
case 10:
rej(err);
return [2 /*return*/];
}
});
}); });
};
SPListProvider.prototype.onAddAttachments = function (item, files) {
var _this = this;
return Promise.all(files.map(function (e) { return _this.onAddAttachment(item, e); }));
};
SPListProvider.prototype.getSchema = function () {
var _this = this;
return this.whenReady()
.then(function () { return _this.schema; });
};
SPListProvider.prototype.setSchema = function (schema) {
this.schema = schema;
};
SPListProvider.prototype.getItemVersion = function (id, exec) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, exec(function (err, ctx, web, list, res) {
var w = all_1.Web(ctx.get_url());
return res(w.lists.getByTitle(list.get_title())
.items.getById(id)
.select("owshiddenversion")
.get());
})];
});
});
};
SPListProvider.prototype.updateAndIncreaseVersion = function (obj, exec, delegate) {
return __awaiter(this, void 0, void 0, function () {
var exe;
var _this = this;
return __generator(this, function (_a) {
exe = exec || executor_1.asyncListExecutor(this.webUrl, this.listTitle);
return [2 /*return*/, this.whenReady().then(function () { return __awaiter(_this, void 0, void 0, function () {
var err_4;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.get(obj.id)];
case 1:
_a.sent();
return [2 /*return*/, exe(function (err, ctx, web, list, resolve, reject) {
if (!err) {
var item_1 = list.getItemById(obj.id);
item_1 = _this.jsonToItem(obj, item_1);
item_1.update();
ctx.load.apply(ctx, __spreadArrays([item_1], _this.includeFields));
ctx.executeQueryAsync(function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
if (obj.pendingAttachments && obj.pendingAttachments.length) {
ctx.load.apply(ctx, __spreadArrays([item_1], this.includeFields));
ctx.executeQueryAsync(function () {
resolve(_this.itemToJson(item_1));
}, function (c, err) {
reject(err);
});
return [2 /*return*/];
}
}
catch (err) {
console.error(err);
}
resolve(this.itemToJson(item_1));
return [2 /*return*/];
});
}); }, function (c, err) {
if (handleSPError(err.get_errorCode(), ctx, list, delegate, resolve)) {
return;
}
if (err.get_errorCode() === errorcodes_1.SPErrorCode.VersionConflict) {
resolve(_this.updateAndIncreaseVersion(obj, exe, delegate));
return;
}
reject(err);
});
return;
}
reject(err);
})];
case 2:
err_4 = _a.sent();
console.error(err_4);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); })];
});
});
};
SPListProvider.prototype.update = function (obj, exec, delegate) {
return __awaiter(this, void 0, void 0, function () {
var exe;
var _this = this;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
exe = exec || executor_1.asyncListExecutor(this.webUrl, this.listTitle);
return [4 /*yield*/, this.whenReady()];
case 1:
_a.sent();
return [2 /*return*/, exe(function (err, ctx, web, list, resolve, reject) {
if (!err) {
var item_2 = list.getItemById(obj.id);
if (_this.schema.documentStatus) {
if (!obj.documentStatus || obj.documentStatus === "Pending") {
obj.documentStatus = "Active";
}
}
item_2 = _this.jsonToItem(obj, item_2);
item_2.update();
ctx.load.apply(ctx, __spreadArrays([item_2], _this.includeFields));
ctx.executeQueryAsync(function () { return __awaiter(_this, void 0, void 0, function () {
var _this = this;
return __generator(this, function (_a) {
try {
if (obj.pendingAttachments && obj.pendingAttachments.length) {
ctx.load.apply(ctx, __spreadArrays([item_2], this.includeFields));
ctx.executeQueryAsync(function () {
resolve(_this.itemToJson(item_2));
}, function (c, err) {
if (handleSPError(err.get_errorCode(), ctx, list, delegate, resolve)) {
return;
}
reject(err);
});
return [2 /*return*/];
}
}
catch (err) {
if (handleSPError(err.get_errorCode(), ctx, list, delegate, resolve)) {
return [2 /*return*/];
}
if (err.get_errorCode() === errorcodes_1.SPErrorCode.VersionConflict) {
resolve(this.updateAndIncreaseVersion(obj, exe, delegate));