@@ -173,7 +173,7 @@ export class DynamicFormBase extends React.Component<
173
173
// Custom Formatting - Header
174
174
let headerContent : JSX . Element ;
175
175
if ( ! customFormattingDisabled && customFormatting ?. header ) {
176
- headerContent = < div className = { styles . header } >
176
+ headerContent = < div className = { styles . header } >
177
177
{ this . _customFormatter . renderCustomFormatContent ( customFormatting . header , this . getFormValuesForValidation ( ) , true ) }
178
178
</ div >
179
179
}
@@ -196,8 +196,8 @@ export class DynamicFormBase extends React.Component<
196
196
let footerContent : JSX . Element ;
197
197
if ( ! customFormattingDisabled && customFormatting ?. footer ) {
198
198
footerContent = < div className = { styles . footer } >
199
- { this . _customFormatter . renderCustomFormatContent ( customFormatting . footer , this . getFormValuesForValidation ( ) , true ) }
200
- </ div >
199
+ { this . _customFormatter . renderCustomFormatContent ( customFormatting . footer , this . getFormValuesForValidation ( ) , true ) }
200
+ </ div >
201
201
}
202
202
203
203
// Content Type
@@ -227,20 +227,20 @@ export class DynamicFormBase extends React.Component<
227
227
{ ( bodySections . length > 0 && ! customFormattingDisabled ) && bodySections
228
228
. filter ( bs => bs . fields . filter ( bsf => hiddenByFormula . indexOf ( bsf ) < 0 ) . length > 0 )
229
229
. map ( ( section , i ) => (
230
- < >
231
- < h2 className = { styles . sectionTitle } > { section . displayname } </ h2 >
232
- < div className = { styles . sectionFormFields } >
233
- { section . fields
234
- . filter ( f => fieldCollection . find ( fc => fc . label === f ) )
235
- . map ( ( f , i ) => (
236
- < div key = { f } className = { styles . sectionFormField } >
237
- { this . renderField ( fieldCollection . find ( fc => fc . label === f ) as IDynamicFieldProps ) }
238
- </ div >
239
- ) ) }
240
- </ div >
241
- { i < bodySections . length - 1 && < hr className = { styles . sectionLine } aria-hidden = { true } /> }
242
- </ >
243
- ) ) }
230
+ < >
231
+ < h2 className = { styles . sectionTitle } > { section . displayname } </ h2 >
232
+ < div className = { styles . sectionFormFields } >
233
+ { section . fields
234
+ . filter ( f => fieldCollection . find ( fc => fc . label === f ) )
235
+ . map ( ( f , i ) => (
236
+ < div key = { f } className = { styles . sectionFormField } >
237
+ { this . renderField ( fieldCollection . find ( fc => fc . label === f ) as IDynamicFieldProps ) }
238
+ </ div >
239
+ ) ) }
240
+ </ div >
241
+ { i < bodySections . length - 1 && < hr className = { styles . sectionLine } aria-hidden = { true } /> }
242
+ </ >
243
+ ) ) }
244
244
{ ( bodySections . length === 0 || customFormattingDisabled ) && fieldCollection . map ( ( f , i ) => this . renderField ( f ) ) }
245
245
{ footerContent }
246
246
{ ! this . props . disabled && (
@@ -296,16 +296,16 @@ export class DynamicFormBase extends React.Component<
296
296
}
297
297
298
298
const sortedFields = customSort
299
- . map ( ( sortColumn ) => sortColumn . toLowerCase ( ) )
300
- . filter ( ( normalizedSortColumn ) => fMap . has ( normalizedSortColumn ) )
301
- . map ( ( normalizedSortColumn ) => fMap . get ( normalizedSortColumn ) )
302
- . filter ( ( field ) => field !== undefined ) ;
299
+ . map ( ( sortColumn ) => sortColumn . toLowerCase ( ) )
300
+ . filter ( ( normalizedSortColumn ) => fMap . has ( normalizedSortColumn ) )
301
+ . map ( ( normalizedSortColumn ) => fMap . get ( normalizedSortColumn ) )
302
+ . filter ( ( field ) => field !== undefined ) ;
303
303
304
304
const remainingFields = fields . filter ( ( field ) => ! sortedFields . includes ( field ) ) ;
305
305
const uniqueRemainingFields = Array . from ( new Set ( remainingFields ) ) ;
306
306
307
307
return [ ...sortedFields , ...uniqueRemainingFields ] ;
308
- }
308
+ }
309
309
310
310
private renderField = ( field : IDynamicFieldProps ) : JSX . Element => {
311
311
const { fieldOverrides } = this . props ;
@@ -331,7 +331,7 @@ export class DynamicFormBase extends React.Component<
331
331
field . columnInternalName
332
332
)
333
333
) {
334
- return fieldOverrides [ field . columnInternalName ] ( { ...field , disabled : field . disabled || isSaving } )
334
+ return fieldOverrides [ field . columnInternalName ] ( { ...field , disabled : field . disabled || isSaving } )
335
335
}
336
336
337
337
// Default render
@@ -342,6 +342,7 @@ export class DynamicFormBase extends React.Component<
342
342
{ ...field }
343
343
disabled = { field . disabled || isSaving }
344
344
validationErrorMessage = { validationErrorMessage }
345
+ itemsQueryCountLimit = { this . props . itemsQueryCountLimit }
345
346
/>
346
347
) ;
347
348
}
@@ -509,21 +510,21 @@ export class DynamicFormBase extends React.Component<
509
510
}
510
511
511
512
// Taxonomy / Managed Metadata fields
512
- if ( useModernTaxonomyPicker ) {
513
+ if ( useModernTaxonomyPicker ) {
513
514
//Use ITermInfo[] for modern taxonomy picker
514
515
if ( fieldType === "TaxonomyFieldType" ) {
515
516
objects [ fieldcolumnInternalName ] = {
516
- __metadata : { type : "SP.Taxonomy.TaxonomyFieldValue" } ,
517
- Label : value [ 0 ] ?. labels [ 0 ] ?. name ?? "" ,
518
- TermGuid : value [ 0 ] ?. id ?? "11111111-1111-1111-1111-111111111111" ,
519
- WssId : "-1" ,
517
+ __metadata : { type : "SP.Taxonomy.TaxonomyFieldValue" } ,
518
+ Label : value [ 0 ] ?. labels [ 0 ] ?. name ?? "" ,
519
+ TermGuid : value [ 0 ] ?. id ?? "11111111-1111-1111-1111-111111111111" ,
520
+ WssId : "-1" ,
520
521
} ;
521
522
}
522
523
523
524
if ( fieldType === "TaxonomyFieldTypeMulti" ) {
524
525
objects [ hiddenFieldName ] = field . newValue
525
- . map ( ( term ) => `-1#;${ term . labels [ 0 ] ?. name || "" } |${ term . id } ;` )
526
- . join ( "#" ) ;
526
+ . map ( ( term ) => `-1#;${ term . labels [ 0 ] ?. name || "" } |${ term . id } ;` )
527
+ . join ( "#" ) ;
527
528
}
528
529
529
530
} else {
@@ -608,7 +609,7 @@ export class DynamicFormBase extends React.Component<
608
609
contentTypeId === undefined ||
609
610
contentTypeId === "" ||
610
611
( ! contentTypeId . startsWith ( "0x0120" ) &&
611
- contentTypeId . startsWith ( "0x01" ) )
612
+ contentTypeId . startsWith ( "0x01" ) )
612
613
) {
613
614
if ( fileSelectRendered === true ) {
614
615
await this . addFileToLibrary ( objects ) ;
@@ -710,51 +711,51 @@ export class DynamicFormBase extends React.Component<
710
711
711
712
712
713
if ( selectedFile !== undefined ) {
713
- try {
714
- const idField = "ID" ;
715
- const contentTypeIdField = "ContentTypeId" ;
716
-
717
- const library = await sp . web . lists . getById ( listId ) ;
718
- const itemTitle =
719
- selectedFile !== undefined && selectedFile . fileName !== undefined && selectedFile . fileName !== ""
720
- ? ( selectedFile . fileName as string ) . replace (
721
- / [ " | * | : | < | > | ? | / | \\ | | ] / g,
722
- "_"
723
- ) . trim ( ) // Replace not allowed chars in folder name and trim empty spaces at the start or end.
724
- : "" ; // Empty string will be replaced by SPO with Folder Item ID
725
-
726
- const folder = ! this . props . folderPath ? library . rootFolder : await this . getFolderByPath ( this . props . folderPath , library . rootFolder ) ;
727
- const fileCreatedResult = await folder . files . addChunked ( encodeURI ( itemTitle ) , await selectedFile . downloadFileContent ( ) ) ;
728
- const fields = await fileCreatedResult . file . listItemAllFields ( ) ;
729
-
730
- if ( fields [ idField ] ) {
731
- // Read the ID of the just created file
732
- const fileId = fields [ idField ] ;
733
-
734
- // Set the content type ID for the target item
735
- objects [ contentTypeIdField ] = contentTypeId ;
736
- // Update the just created file
737
- const iur = await this . updateListItemRetry ( library , fileId , objects ) ;
738
- if ( onSubmitted ) {
739
- onSubmitted (
740
- iur . data ,
741
- returnListItemInstanceOnSubmit !== false
742
- ? iur . item
743
- : undefined
744
- ) ;
745
- }
746
- } else {
747
- throw new Error (
748
- "Unable to read the ID of the just created file"
714
+ try {
715
+ const idField = "ID" ;
716
+ const contentTypeIdField = "ContentTypeId" ;
717
+
718
+ const library = await sp . web . lists . getById ( listId ) ;
719
+ const itemTitle =
720
+ selectedFile !== undefined && selectedFile . fileName !== undefined && selectedFile . fileName !== ""
721
+ ? ( selectedFile . fileName as string ) . replace (
722
+ / [ " | * | : | < | > | ? | / | \\ | | ] / g,
723
+ "_"
724
+ ) . trim ( ) // Replace not allowed chars in folder name and trim empty spaces at the start or end.
725
+ : "" ; // Empty string will be replaced by SPO with Folder Item ID
726
+
727
+ const folder = ! this . props . folderPath ? library . rootFolder : await this . getFolderByPath ( this . props . folderPath , library . rootFolder ) ;
728
+ const fileCreatedResult = await folder . files . addChunked ( encodeURI ( itemTitle ) , await selectedFile . downloadFileContent ( ) ) ;
729
+ const fields = await fileCreatedResult . file . listItemAllFields ( ) ;
730
+
731
+ if ( fields [ idField ] ) {
732
+ // Read the ID of the just created file
733
+ const fileId = fields [ idField ] ;
734
+
735
+ // Set the content type ID for the target item
736
+ objects [ contentTypeIdField ] = contentTypeId ;
737
+ // Update the just created file
738
+ const iur = await this . updateListItemRetry ( library , fileId , objects ) ;
739
+ if ( onSubmitted ) {
740
+ onSubmitted (
741
+ iur . data ,
742
+ returnListItemInstanceOnSubmit !== false
743
+ ? iur . item
744
+ : undefined
749
745
) ;
750
746
}
751
- } catch ( error ) {
752
- if ( onSubmitError ) {
753
- onSubmitError ( objects , error ) ;
754
- }
755
- console . log ( "Error" , error ) ;
747
+ } else {
748
+ throw new Error (
749
+ "Unable to read the ID of the just created file"
750
+ ) ;
751
+ }
752
+ } catch ( error ) {
753
+ if ( onSubmitError ) {
754
+ onSubmitError ( objects , error ) ;
756
755
}
756
+ console . log ( "Error" , error ) ;
757
757
}
758
+ }
758
759
}
759
760
760
761
/**
@@ -776,7 +777,7 @@ export class DynamicFormBase extends React.Component<
776
777
const { useModernTaxonomyPicker } = this . props ;
777
778
// Init new value(s)
778
779
field . newValue = newValue ;
779
- field . stringValue = newValue ? newValue . toString ( ) : '' ;
780
+ field . stringValue = newValue ? newValue . toString ( ) : '' ;
780
781
field . additionalData = additionalData ;
781
782
field . subPropertyValues = { } ;
782
783
@@ -791,12 +792,12 @@ export class DynamicFormBase extends React.Component<
791
792
if ( field . fieldType === "Lookup" || field . fieldType === "LookupMulti" ) {
792
793
field . stringValue = newValue . map ( nv => nv . key + ';#' + nv . name ) . join ( ';#' ) ;
793
794
}
794
- if ( useModernTaxonomyPicker ) {
795
+ if ( useModernTaxonomyPicker ) {
795
796
if ( field . fieldType === "TaxonomyFieldType" || field . fieldType === "TaxonomyFieldTypeMulti" ) {
796
797
if ( Array . isArray ( newValue ) && newValue . length > 0 ) {
797
- field . stringValue = newValue . map ( nv => nv . labels . map ( label => label . name ) . join ( ';' ) ) . join ( ';' ) ;
798
+ field . stringValue = newValue . map ( nv => nv . labels . map ( label => label . name ) . join ( ';' ) ) . join ( ';' ) ;
798
799
} else {
799
- field . stringValue = "" ;
800
+ field . stringValue = "" ;
800
801
}
801
802
}
802
803
} else {
@@ -851,7 +852,7 @@ export class DynamicFormBase extends React.Component<
851
852
field . stringValue = emails . join ( ";" ) ;
852
853
}
853
854
854
- const validationErrors = { ...this . state . validationErrors } ;
855
+ const validationErrors = { ...this . state . validationErrors } ;
855
856
if ( validationErrors [ field . columnInternalName ] ) delete validationErrors [ field . columnInternalName ] ;
856
857
857
858
this . setState ( {
@@ -1048,7 +1049,7 @@ export class DynamicFormBase extends React.Component<
1048
1049
const spListItem = spList . items . getById ( listItemId ) ;
1049
1050
1050
1051
if ( contentTypeId . startsWith ( "0x0120" ) || contentTypeId . startsWith ( "0x0101" ) ) {
1051
- spListItem . select ( "*" , "FileLeafRef" ) ; // Explainer: FileLeafRef is not loaded by default. Load it to show the file/folder name in the field.
1052
+ spListItem . select ( "*" , "FileLeafRef" ) ; // Explainer: FileLeafRef is not loaded by default. Load it to show the file/folder name in the field.
1052
1053
}
1053
1054
1054
1055
item = await spListItem . get ( ) . catch ( err => this . updateFormMessages ( MessageBarType . error , err . message ) ) ;
@@ -1117,8 +1118,8 @@ export class DynamicFormBase extends React.Component<
1117
1118
* @returns
1118
1119
*/
1119
1120
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1120
- private async buildFieldCollection ( listInfo : IRenderListDataAsStreamClientFormResult , contentTypeName : string , item : any , numberFields : ISPField [ ] , listId : string , listItemId : number , disabledFields : string [ ] , customIcons : { [ key : string ] : string } ) : Promise < IDynamicFieldProps [ ] > {
1121
- const { useModernTaxonomyPicker } = this . props ;
1121
+ private async buildFieldCollection ( listInfo : IRenderListDataAsStreamClientFormResult , contentTypeName : string , item : any , numberFields : ISPField [ ] , listId : string , listItemId : number , disabledFields : string [ ] , customIcons : { [ key : string ] : string } ) : Promise < IDynamicFieldProps [ ] > {
1122
+ const { useModernTaxonomyPicker } = this . props ;
1122
1123
const tempFields : IDynamicFieldProps [ ] = [ ] ;
1123
1124
let order : number = 0 ;
1124
1125
const hiddenFields = this . props . hiddenFields !== undefined ? this . props . hiddenFields : [ ] ;
@@ -1129,7 +1130,7 @@ export class DynamicFormBase extends React.Component<
1129
1130
1130
1131
// Process fields that are not marked as hidden
1131
1132
if ( hiddenFields . indexOf ( field . InternalName ) < 0 ) {
1132
- if ( field . Hidden === false ) {
1133
+ if ( field . Hidden === false ) {
1133
1134
order ++ ;
1134
1135
let hiddenName = "" ;
1135
1136
let termSetId = "" ;
@@ -1265,7 +1266,7 @@ export class DynamicFormBase extends React.Component<
1265
1266
}
1266
1267
1267
1268
// Setup Taxonomy / Metadata fields
1268
- if ( useModernTaxonomyPicker ) {
1269
+ if ( useModernTaxonomyPicker ) {
1269
1270
if ( field . FieldType === "TaxonomyFieldType" ) {
1270
1271
termSetId = field . TermSetId ;
1271
1272
anchorId = field . AnchorId !== Guid . empty . toString ( ) ? field . AnchorId : null ;
@@ -1301,7 +1302,7 @@ export class DynamicFormBase extends React.Component<
1301
1302
termSetId = field . TermSetId ;
1302
1303
anchorId = field . AnchorId !== Guid . empty . toString ( ) ? field . AnchorId : null ;
1303
1304
if ( item && item [ field . InternalName ] ) {
1304
- const _selectedTags = await this . getTermsForModernTaxonomyPicker ( field . TermSetId , item [ field . InternalName ] ) ;
1305
+ const _selectedTags = await this . getTermsForModernTaxonomyPicker ( field . TermSetId , item [ field . InternalName ] ) ;
1305
1306
item [ field . InternalName ] . forEach ( ( element ) => {
1306
1307
selectedTags . push ( {
1307
1308
key : element . TermGuid ,
@@ -1730,8 +1731,7 @@ export class DynamicFormBase extends React.Component<
1730
1731
try {
1731
1732
return await list . items . getById ( itemId ) . update ( objects ) ;
1732
1733
}
1733
- catch ( error )
1734
- {
1734
+ catch ( error ) {
1735
1735
if ( error . status === 409 && retry < 3 ) {
1736
1736
await timeout ( 100 ) ;
1737
1737
return await this . updateListItemRetry ( list , itemId , objects , retry + 1 ) ;
0 commit comments