UNPKG

gd-sprest-bs

Version:

SharePoint JavaScript, TypeScript and Web Components designed using the Bootstrap framework.

67 lines (58 loc) 2.49 kB
import { Components } from "../components/core"; import { BasePropertyPane } from "./base"; import { IDropdown } from "./types"; /** * Dropdown */ export class _Dropdown<T = IDropdown> extends BasePropertyPane<T> { // Internal rendering event protected onRendering(props: Components.IFormControlPropsDropdown): Components.IFormControlPropsDropdown { return props; } // Override the render event onRender(el: HTMLElement, context: any, onChange: (targetProperty: string, newValue?: string | number | boolean | undefined) => void) { let currentValue = this.currentValueAsObject<string[]>(); if (currentValue) { let values = []; // Parse the values for (let i = 0; i < currentValue.length; i++) { values.push(currentValue[i]["value"] || currentValue[i]["text"] || currentValue[i]["label"]); } // Update the current value currentValue = values; } // Set the properties let config: IDropdown = this.config; let props = { description: config.description, items: config.items, label: config.label, name: this.targetProperty, type: Components.FormControlTypes.Dropdown, value: currentValue, onChange: (item) => { // Convert the object as a string let value: string | number | boolean | undefined = undefined; try { value = JSON.stringify(item); } catch { } // Call the event value = config.onSave ? config.onSave(value) : value; // Update the property onChange(this.targetProperty, value); } } as Components.IFormControlPropsDropdown; // Call the rendering events props = this.onRendering(props); props = config.onRendering ? config.onRendering(props) : props; // Render the dropdown Components.Form({ el, controls: [props], onControlRendered: (ctrl) => { // Call the event config.onRendered ? config.onRendered(ctrl.dropdown, ctrl.props) : null; } }) } } export const Dropdown = (targetProperty: string, config: IDropdown, context?: any) => { return new _Dropdown(targetProperty, config, context); }