@pnp/spfx-property-controls
Version:
Reusable property pane controls for SharePoint Framework solutions
105 lines • 4.2 kB
JavaScript
import * as React from 'react';
import * as ReactDom from 'react-dom';
import { PropertyPaneFieldType } from '@microsoft/sp-property-pane';
import PropertyFieldFolderPickerHost from './PropertyFieldFolderPickerHost';
/**
* Represents a PropertyFieldFolderPickerPicker object
*/
class PropertyFieldFolderPickerBuilder {
/**
* Constructor method
*/
constructor(_targetProperty, _properties) {
this.type = PropertyPaneFieldType.Custom;
this.disabled = false;
this.required = false;
this.canCreateFolders = false;
this.render = this.render.bind(this);
this.targetProperty = _targetProperty;
this.properties = _properties;
this.properties.onDispose = this.dispose;
this.properties.onRender = this.render;
this.label = _properties.label;
this.context = _properties.context;
this.onPropertyChange = _properties.onPropertyChange;
this.customProperties = _properties.properties;
this.key = _properties.key;
this.rootFolder = _properties.rootFolder;
this.defaultFolder = _properties.defaultFolder;
this.onSelect = _properties.onSelect;
this.onPropertyChange = _properties.onPropertyChange;
this.customProperties = _properties.properties;
this.siteAbsoluteUrl = this.properties.siteAbsoluteUrl;
if (_properties.required === true) {
this.required = _properties.required;
}
if (_properties.disabled === true) {
this.disabled = _properties.disabled;
}
if (_properties.canCreateFolders === true) {
this.canCreateFolders = _properties.canCreateFolders;
}
}
/**
* Renders the FolderPickerPicker field content
*/
render(elem, ctx, changeCallback) {
const element = React.createElement(PropertyFieldFolderPickerHost, {
label: this.label,
targetProperty: this.targetProperty,
context: this.context,
rootFolder: this.rootFolder,
defaultFolder: this.defaultFolder,
onSelect: this.onSelect,
required: this.required,
canCreateFolders: this.canCreateFolders,
onDispose: this.dispose,
onRender: this.render,
onChange: changeCallback,
onPropertyChange: this.onPropertyChange,
properties: this.customProperties,
key: this.key,
disabled: this.disabled,
selectedFolder: this.selectedFolder,
siteAbsoluteUrl: this.siteAbsoluteUrl
});
// Calls the REACT content generator
ReactDom.render(element, elem);
}
/**
* Disposes the current object
*/
dispose(_elem) {
ReactDom.unmountComponentAtNode(_elem);
}
}
/**
* Helper method to create a Role Definitions Picker on the PropertyPane.
* @param targetProperty - Target property the SharePoint role definition picker is associated to.
* @param properties - Strongly typed Role Definition Picker properties.
*/
export function PropertyFieldFolderPicker(targetProperty, properties) {
//Create an internal properties object from the given properties
const newProperties = {
label: properties.label,
targetProperty: targetProperty,
context: properties.context,
onPropertyChange: properties.onPropertyChange,
properties: properties.properties,
onDispose: null,
onRender: null,
key: properties.key,
disabled: properties.disabled,
onSelect: properties.onSelect,
rootFolder: properties.rootFolder,
canCreateFolders: properties.canCreateFolders,
defaultFolder: properties.defaultFolder,
required: properties.required,
selectedFolder: properties.selectedFolder,
siteAbsoluteUrl: properties.siteAbsoluteUrl
};
//Calls the PropertyFieldFolderPickerPicker builder object
//This object will simulate a PropertyFieldCustom to manage his rendering process
return new PropertyFieldFolderPickerBuilder(targetProperty, newProperties);
}
//# sourceMappingURL=PropertyFieldFolderPicker.js.map