UNPKG

gd-sprest-js

Version:

SharePoint 2013/Online js components.

416 lines (415 loc) 17.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var gd_sprest_1 = require("gd-sprest"); var __1 = require(".."); var _1 = require("."); // Extend the list form exports.ListForm = gd_sprest_1.Helper.ListForm; // Method to render the attachments view exports.ListForm.renderAttachmentsView = function (props) { var attachments = props.info.attachments || []; // Render the list var renderList = function (el) { var items = []; // Parse the attachments for (var i = 0; i < attachments.length; i++) { var attachment = attachments[i]; // Add the item items.push({ primaryText: attachment.FileName, actions: [{ iconName: "Download", url: attachment.ServerRelativeUrl }] }); } // Render the list __1.Fabric.List({ el: el, items: items }); }; // Method to render the menu var renderMenu = function (el) { // Render a command bar __1.Fabric.CommandBar({ el: el, mainCommands: [{ text: "Upload", onClick: function () { // Show a spinner __1.Fabric.Spinner({ el: props.el, text: "Saving the attachment..." }); // Show the file dialog exports.ListForm.showFileDialog(props.info).then(function () { // Render the list renderList(props.el.children[1]); // Call the save event props.onSave ? props.onSave(props.info) : null; }); } }] }); }; // Render the template props.el.innerHTML = "<div></div><div></div>"; // Render the menu renderMenu(props.el.children[0]); // Render the list renderList(props.el.children[1]); }; // Method to render a display form for an item exports.ListForm.renderDisplayForm = function (props) { var fields = []; // Render the form template exports.ListForm.renderFormTemplate(props); // Load the list item props.info.list.Items(props.info.item.Id) // Get the html for the fields .FieldValuesAsHtml() // Execute the request .execute(function (formValues) { var hasUserField = false; // Parse the fields for (var fieldName in props.info.fields) { // Get the element var elField = props.el.querySelector("[data-field='" + fieldName + "']"); if (elField) { var field = props.info.fields[fieldName]; var html = formValues[fieldName] || formValues[fieldName.replace(/\_/g, "_x005f_")] || ""; // Set the flag hasUserField = hasUserField || field.FieldTypeKind == gd_sprest_1.SPTypes.FieldType.User; // Set the html for this field elField.innerHTML = [ '<div class="display-form">', __1.Fabric.Templates.Label({ className: "field-label", description: field.Description, text: field.Title }), '<div class="field-value">' + html.replace(/\r?\n/g, '<br/>') + '</div>', '</div>' ].join('\n'); // Add this field fields.push(elField); } } // See if we are displaying a user field if (hasUserField) { // Enable the persona window["ProcessImn"](); } }); // Return the form return { getFields: function () { return fields; } }; }; // Render the edit form exports.ListForm.renderEditForm = function (props) { var controlMode = typeof (props.controlMode) === "number" ? props.controlMode : props.info.item ? gd_sprest_1.SPTypes.ControlMode.Edit : gd_sprest_1.SPTypes.ControlMode.New; var fields = []; // Render the form template exports.ListForm.renderFormTemplate(props); // Parse the fields for (var fieldName in props.info.fields) { var field = props.info.fields[fieldName]; var value = props.info.item ? props.info.item[fieldName] : null; // Get the field element and ensure it exists var elField = props.el.querySelector("[data-field='" + fieldName + "']"); if (elField == null) { continue; } // See if this is a read-only field if (field.ReadOnlyField) { // Do not render in the new form if (props.controlMode == gd_sprest_1.SPTypes.ControlMode.New) { continue; } } // See if this is the hidden taxonomy field if (field.Hidden && field.FieldTypeKind == gd_sprest_1.SPTypes.FieldType.Note && field.Title.endsWith("_0")) { // Do not render this field continue; } // See if this is an invalid field type if (field.FieldTypeKind == gd_sprest_1.SPTypes.FieldType.Invalid) { // Ensure it's not a taxonomy field if (!field.TypeAsString.startsWith("TaxonomyFieldType")) { continue; } } // Render the field _1.Field({ controlMode: controlMode, el: elField, fieldInfo: { field: field, listName: props.info.list.Title, name: fieldName, webUrl: props.info.webUrl }, value: value }).then(function (field) { // Add the field fields.push(field); }); } // Method to get the form values var getFormValues = function () { var formValues = {}; var unknownUsers = {}; // Parse the fields for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldName = field.fieldInfo.name; var fieldValue = field.element.getValue(); // Update the field name/value, based on the type switch (field.fieldInfo.type) { // Choice case gd_sprest_1.SPTypes.FieldType.Choice: // Update the field value fieldValue = fieldValue && fieldValue.length > 0 ? fieldValue[0].value : null; break; // Lookup case gd_sprest_1.SPTypes.FieldType.Lookup: // Append 'Id' to the field name fieldName += fieldName.lastIndexOf("Id") == fieldName.length - 2 ? "" : "Id"; // See if this is a multi-value field if (field.fieldInfo.multi) { var values = fieldValue || []; fieldValue = { results: [] }; // Parse the options for (var j = 0; j < values.length; j++) { // Add the value fieldValue.results.push(values[j].value); } } else { // Update the field value fieldValue = fieldValue && fieldValue.length > 0 ? fieldValue[0].value : fieldValue; } break; // Multi-Choice case gd_sprest_1.SPTypes.FieldType.MultiChoice: var options = fieldValue || []; fieldValue = { results: [] }; // Parse the options for (var j = 0; j < options.length; j++) { // Add the option fieldValue.results.push(options[j].value); } break; // URL case gd_sprest_1.SPTypes.FieldType.URL: // See if the field value exists if (fieldValue) { // Add the metadata fieldValue.__metadata = { type: "SP.FieldUrlValue" }; } break; // User case gd_sprest_1.SPTypes.FieldType.User: // Append 'Id' to the field name fieldName += fieldName.lastIndexOf("Id") == fieldName.length - 2 ? "" : "Id"; // See if this is a multi-value field if (field.fieldInfo.multi) { var values = fieldValue || []; fieldValue = { results: [] }; // Parse the options for (var j = 0; j < values.length; j++) { var userValue = values[j]; if (userValue && userValue.EntityData) { // Ensure the user or group id exists if (userValue.EntityData.SPGroupID || userValue.EntityData.SPUserID) { // Update the field value fieldValue.results.push(userValue.EntityData.SPUserID || userValue.EntityData.SPGroupID); } else { // Add the unknown user account unknownUsers[fieldName] = unknownUsers[fieldName] || []; unknownUsers[fieldName].push(userValue.Key); } } } } else { var userValue = fieldValue ? fieldValue[0] : null; if (userValue && userValue.EntityData) { // Ensure the user or group id exists if (userValue.EntityData.SPGroupID || userValue.EntityData.SPUserID) { // Update the field value fieldValue = userValue.EntityData.SPUserID || userValue.EntityData.SPGroupID; } else { // Add the unknown user account unknownUsers[fieldName] = unknownUsers[fieldName] || []; unknownUsers[fieldName].push(userValue.Key); } } else { // Clear the field value fieldValue = null; } } break; // MMS default: if (field.fieldInfo.typeAsString.startsWith("TaxonomyFieldType")) { // See if this is a multi field if (field.fieldInfo.typeAsString.endsWith("Multi")) { // Update the field name to the value field fieldName = field.fieldInfo.valueField.InternalName; // Parse the field values var fieldValues = fieldValue || []; fieldValue = []; for (var j = 0; j < fieldValues.length; j++) { var termInfo = fieldValues[j]; // Add the field value fieldValue.push(-1 + ";#" + termInfo.text + "|" + termInfo.value); } // Set the field value fieldValue = fieldValue.join(";#"); } else { // Update the value fieldValue = fieldValue && fieldValue.length > 0 ? { __metadata: { type: "SP.Taxonomy.TaxonomyFieldValue" }, Label: fieldValue[0].text, TermGuid: fieldValue[0].value, WssId: -1 } : fieldValue; } } break; } // Set the field value formValues[fieldName] = fieldValue; } // Return the form values return { formValues: formValues, unknownUsers: unknownUsers }; }; // Return the form return { // Returns the fields getFields: function () { return fields; }, // Returns the field values getValues: function () { // Return a promise return new Promise(function (resolve, reject) { var _a = getFormValues(), formValues = _a.formValues, unknownUsers = _a.unknownUsers; var web = gd_sprest_1.Web(); // Parse the field names for (var fieldName in unknownUsers) { // Parse the user accounts for (var i = 0; i < unknownUsers[fieldName].length; i++) { // Ensure this user account exists web.ensureUser(unknownUsers[fieldName][i]).execute(true); } } // Wait for the requests to complete web.done(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } // Parse the field names for (var fieldName in unknownUsers) { // Parse the user accounts for (var i = 0; i < unknownUsers[fieldName].length; i++) { var userLogin = unknownUsers[fieldName][i]; // Parse the responses for (var j = 0; j < args.length; j++) { var user = args[j]; // See if this is the user if (user.LoginName == userLogin) { // See if this is a multi-user value if (formValues[fieldName].results != null) { // Set the user account formValues[fieldName].push(user.Id); } else { // Set the user account formValues[fieldName] = user.Id; } } } } } // Resolve the promise resolve(formValues); }); }); }, // Flag to determine if the form is valid isValid: function () { var formValues = getFormValues().formValues; // Parse the fields for (var i = 0; i < fields.length; i++) { var field = fields[i]; // See if this field is required if (field.fieldInfo.required) { // Ensure a value exists if (formValues[field.fieldInfo.name]) { continue; } // Form is invalid return false; } } // Form is valid return true; } }; }; // Method to render the form template exports.ListForm.renderFormTemplate = function (props) { // Clear the element props.el.innerHTML = ""; // See if the field order has been specified if (props.includeFields) { // Parse the fields to include for (var i = 0; i < props.includeFields.length; i++) { // Parse the fields for (var fieldName in props.info.fields) { // See if we are including this field if (props.includeFields[i] == fieldName) { // Append the field to the form props.el.innerHTML += "<div data-field='" + fieldName + "'></div>"; break; } } } } // Else, see if fields have been specified to be excluded else if (props.excludeFields) { // Parse the fields for (var fieldName in props.info.fields) { var excludeField = props.includeFields ? true : false; // Parse the fields for (var i = 0; i < props.excludeFields.length; i++) { // See if we are excluding this field if (props.excludeFields[i] == fieldName) { // Set the flag excludeField = true; break; } } // See if we are excluding the field if (excludeField) { continue; } // Append the field to the form props.el.innerHTML += "<div data-field='" + fieldName + "'></div>"; } } else { // Parse the fields for (var fieldName in props.info.fields) { // Append the field to the form props.el.innerHTML += "<div data-field='" + fieldName + "'></div>"; } } };