Skip to content

Dynamic Form

This control can dynamically generate SharePoint list or SharePoint document library form and everything controlled through list setting.

How to use this control in your solutions

  • Check that you installed the @pnp/spfx-controls-react dependency. Check out the getting started page for more information about installing the dependency.
  • Import the following modules to your component:
import { DynamicForm } from "@pnp/spfx-controls-react/lib/DynamicForm";
  • Use the DynamicForm control in your code as follows:
<DynamicForm 
          context={this.props.context} 
          listId={"3071c058-549f-461d-9d73-8b9a52049a80"}  
          listItemId={1}
          onCancelled={() => { console.log('Cancelled') }}
          onBeforeSubmit={async (listItem) => { return false; }}
          onSubmitError={(listItem, error) => { alert(error.message); }}
          onSubmitted={async (listItemData) => { console.log(listItemData); }}>
</DynamicForm>

DynamicForm

File selection

To upload a file when creating a new document in a document library you need to specify: - enableFileSelection: Set this parameter to true to enable file selection. - contentTypeId: This parameter specifies the target content type ID of the document you are creating. - supportedFileExtensions: This parameter is optional and is used to specify the supported file extensions if they are different from the default ones.

Enabling the file selection will display a new button on top of the form that allow the user to select a file from the recent files, browsing OneDrive or select and upload a file from the computer.

DynamicFormWithFileSelection

Implementation

The DynamicForm can be configured with the following properties:

Property Type Required Description
context BaseComponentContext yes The context object of the SPFx loaded webpart or customizer.
listId string yes Guid of the list.
listItemId number no list item ID.
contentTypeId string no content type ID
disabled boolean no Allows form to be disabled. Default value is false
disabledFields string[] no InternalName of fields that should be disabled. Default value is false
enableFileSelection boolean no Specify if the form should support the creation of a new list item in a document library attaching a file to it. This option is only available for document libraries and works only when the contentTypeId is specified and has a base type of type Document. Default value is false
hiddenFields string[] no InternalName of fields that should be hidden. Default value is false
onListItemLoaded (listItemData: any) => Promise<void> no List item loaded handler. Allows to access list item information after it's loaded.
onBeforeSubmit (listItemData: any) => Promise<boolean> no Before submit handler. Allows to modify the object to be submitted or cancel the submission. To cancel, return true.
onSubmitted (listItemData: any, listItem?: IItem) => void no Method that returns listItem data JSON object and PnPJS list item instance (IItem).
onSubmitError (listItemData: any, error: Error) => void no Handler of submission error.
onCancelled () => void no Handler when form has been cancelled.
returnListItemInstanceOnSubmit boolean no Specifies if onSubmitted event should pass PnPJS list item (IItem) as a second parameter. Default - true
supportedFileExtensions string[] no Specify the supported file extensions for the file picker. Only used when enableFileSelection is true. Default value is ["docx", "doc", "pptx", "ppt", "xlsx", "xls", "pdf"].
webAbsoluteUrl string no Absolute Web Url of target site (user requires permissions).
fieldOverrides {[columnInternalName: string] : {(fieldProperties: IDynamicFieldProps): React.ReactElement\<IDynamicFieldProps>}} no Key value pair for fields you want to override. Key is the internal field name, value is the function to be called for the custom element to render.
respectEtag boolean no Specifies if the form should respect the ETag of the item. Default - true
saveDisabled boolean no Specifies if save button is disabled.
validationErrorDialogProps IValidationErrorDialogProps no Specifies validation error dialog properties
customIcons { [ columnInternalName: string ]: string } no Specifies custom icons for the form. The key of this dictionary is the column internal name, the value is the Fluent UI icon name.

Validation Error Dialog Properties IValidationErrorDialogProps

Property Type Required Description
showDialogOnValidationError boolean no Specifies if the dialog should be shown on validation error. Default - false
customTitle string no Specifies a custom title to be shown in the validation dialog. Default - empty
customMessage string no Specifies a custom message to be shown in the validation dialog. Default - empty