@@ -227,35 +227,65 @@ export class DynamicForm extends React.Component<IDynamicFormProps, IDynamicForm
227
227
228
228
// trigger when the user change any value in the form
229
229
private onChange = async ( internalName : string , newValue : any , additionalData ?: FieldChangeAdditionalData ) => {
230
- try {
231
- let fieldCol = ( this . state . fieldCollection || [ ] ) . slice ( ) ;
232
- let field = fieldCol . filter ( ( element , i ) => { return element . columnInternalName === internalName ; } ) [ 0 ] ;
233
- field . newValue = newValue ;
234
- field . additionalData = additionalData ;
235
- if ( field . fieldType === "User" && newValue . length !== 0 ) {
236
- let result = await sp . web . ensureUser ( newValue [ 0 ] . secondaryText ) ;
230
+ // try {
231
+ let fieldCol = ( this . state . fieldCollection || [ ] ) . slice ( ) ;
232
+ let field = fieldCol . filter ( ( element , i ) => { return element . columnInternalName === internalName ; } ) [ 0 ] ;
233
+ field . newValue = newValue ;
234
+ field . additionalData = additionalData ;
235
+ if ( field . fieldType === "User" && newValue . length !== 0 ) {
236
+ // let result = await sp.web.ensureUser(newValue[0].secondaryText);
237
+ // field.newValue = result.data.Id;
238
+
239
+ if ( newValue [ 0 ] . id === undefined || parseInt ( newValue [ 0 ] . id , 10 ) . toString ( ) === "NaN" ) {
240
+ let user : string = newValue [ 0 ] . secondaryText ;
241
+ if ( user . indexOf ( '@' ) === - 1 ) {
242
+ user = newValue [ 0 ] . loginName ;
243
+ }
244
+ let result = await sp . web . ensureUser ( user ) ;
237
245
field . newValue = result . data . Id ;
238
246
}
239
- else if ( field . fieldType === "UserMulti" && newValue . length !== 0 ) {
240
- field . newValue = [ ] ;
241
- for ( let index = 0 ; index < newValue . length ; index ++ ) {
242
- const element = newValue [ index ] ;
243
- let user : string = element . secondaryText ;
244
- if ( user . indexOf ( '@' ) === - 1 ) {
245
- user = element . loginName ;
246
- }
247
- let result = await sp . web . ensureUser ( user ) ;
248
- field . newValue . push ( result . data . Id ) ;
249
- }
247
+ else {
248
+ field . newValue = newValue [ 0 ] . id ;
250
249
}
251
- this . setState ( {
252
- fieldCollection : fieldCol
253
- } ) ;
254
- } catch ( error ) {
255
250
256
- console . log ( `Error onchange` , error ) ;
257
- return null ;
258
251
}
252
+ else if ( field . fieldType === "UserMulti" && newValue . length !== 0 ) {
253
+ field . newValue = [ ] ;
254
+ for ( let index = 0 ; index < newValue . length ; index ++ ) {
255
+ const element = newValue [ index ] ;
256
+ var retrivedItem : boolean = false ;
257
+ if ( field . fieldDefaultValue != null ) {
258
+ if ( field . fieldDefaultValue . join ( ',' ) . indexOf ( element . text ) !== - 1 )
259
+ field . fieldDefaultValue . forEach ( item => {
260
+ if ( item . split ( '/' ) [ 1 ] === element . text ) {
261
+ retrivedItem = true ;
262
+ field . newValue . push ( item . split ( '/' ) [ 0 ] ) ;
263
+ }
264
+ } ) ;
265
+ }
266
+ if ( ! retrivedItem ) {
267
+ if ( element . id === undefined || parseInt ( element . id , 10 ) . toString ( ) === "NaN" ) {
268
+ let user : string = element . secondaryText ;
269
+ if ( user . indexOf ( '@' ) === - 1 ) {
270
+ user = element . loginName ;
271
+ }
272
+ let result = await sp . web . ensureUser ( user ) ;
273
+ field . newValue . push ( result . data . Id ) ;
274
+ }
275
+ else {
276
+ field . newValue . push ( element . id ) ;
277
+ }
278
+ }
279
+ }
280
+ }
281
+ this . setState ( {
282
+ fieldCollection : fieldCol
283
+ } ) ;
284
+ // } catch (error) {
285
+
286
+ // console.log(`Error onchange`, error);
287
+ // return null;
288
+ // }
259
289
}
260
290
261
291
//getting all the fields information as part of get ready process
@@ -291,6 +321,7 @@ export class DynamicForm extends React.Component<IDynamicFormProps, IDynamicForm
291
321
let selectedTags : any = [ ] ;
292
322
let richText = false ;
293
323
let dateFormat : DateFormat | undefined ;
324
+ let principalType = "" ;
294
325
if ( item !== null ) {
295
326
defaultValue = item [ field . InternalName ] ;
296
327
}
@@ -387,6 +418,8 @@ export class DynamicForm extends React.Component<IDynamicFormProps, IDynamicForm
387
418
else {
388
419
defaultValue = [ ] ;
389
420
}
421
+ principalType = field . SchemaXml . split ( 'UserSelectionMode="' ) [ 1 ] ;
422
+ principalType = principalType . substring ( 0 , principalType . indexOf ( '"' ) ) ;
390
423
}
391
424
else if ( fieldType === "Thumbnail" ) {
392
425
if ( defaultValue !== null ) {
@@ -402,6 +435,8 @@ export class DynamicForm extends React.Component<IDynamicFormProps, IDynamicForm
402
435
else {
403
436
defaultValue = [ ] ;
404
437
}
438
+ principalType = field . SchemaXml . split ( 'UserSelectionMode="' ) [ 1 ] ;
439
+ principalType = principalType . substring ( 0 , principalType . indexOf ( '"' ) ) ;
405
440
}
406
441
else if ( fieldType === "Location" ) {
407
442
defaultValue = JSON . parse ( defaultValue ) ;
@@ -428,7 +463,8 @@ export class DynamicForm extends React.Component<IDynamicFormProps, IDynamicForm
428
463
Order : field . order ,
429
464
isRichText : richText ,
430
465
dateFormat : dateFormat ,
431
- listItemId : listItemId
466
+ listItemId : listItemId ,
467
+ principalType : principalType
432
468
} ) ;
433
469
tempFields . sort ( ( a , b ) => a . Order - b . Order ) ;
434
470
}
0 commit comments