import { Components } from "gd-bs"; import { Helper } from "./helper"; import { IWebPartCfg, IWebPartEditForm, IWebPartInfo, IWebPartProps } from "./types"; declare var MSOWebPartPageFormName; /** * WebPart Configuration */ export const WPCfg = (cfg: IWebPartCfg, wp: IWebPartInfo, props: IWebPartProps) => { let _editForm: IWebPartEditForm = props.editForm || {}; // Method to detect if the wiki page is being edited let isWikiPageInEdit = () => { let wikiPageMode = null; // Get the form let form = document.forms[MSOWebPartPageFormName]; if (form) { // Get the wiki page mode wikiPageMode = form._wikiPageMode ? form._wikiPageMode.value : null; } // Determine if this wiki page is being edited return wikiPageMode == "Edit"; } // The default render method when the page is edited let render = () => { let form: Components.IForm = null; // Ensure we need to render this if (_editForm == null) { return; } // Render the template wp.el.innerHTML = [ '
', '' ].join('\n'); // Render the button to toggle the modal Components.Button({ el: wp.el.children[0] as HTMLElement, text: "Configure WebPart", type: Components.ButtonTypes.Secondary, onClick: () => { modal.show(); } }); // Render the modal let modal = Components.Modal({ el: wp.el.children[1] as HTMLElement, id: (wp.cfg.WebPartId || "") + "_modal", options: { centered: true }, title: "Configuration Panel", type: Components.ModalTypes.Large, onRenderBody: el => { let formControls: any = null; // Set the class name el.classList.add("wp-cfg-form"); // See if the render form event exists if (_editForm.onRenderForm) { // Call the event formControls = _editForm.onRenderForm(wp) || []; } // See if there is a promise if (formControls.then) { // Wait for the promise to be resolved formControls.then(formControls => { // Render the edit form form = Helper.renderEditForm(el, wp.cfg, formControls); }); } // Else, render the edit form else { form = Helper.renderEditForm(el, wp.cfg, formControls); } // Call the render form event props.onRenderForm ? props.onRenderForm(form, wp) : null; }, onRenderFooter: el => { let actionButtons: Array