UNPKG

@sysdoc/sharepoint-utils

Version:

Sysdoc's core Sharepoint utilities

1,016 lines (1,015 loc) 67.7 kB
"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));