191191 import {
192192 UPDATE_PROGRAM_USER_SORT
193193 } from " @/store/sorting/mutation-types" ;
194+ import {SearchRequest } from " @/breeding-insight/model/SearchRequest" ;
195+ import {FilterRequest } from " @/breeding-insight/model/FilterRequest" ;
194196
195197@Component ({
196198 components: { ExpandableTable , NewDataForm , BasicInputField , BasicSelectField , TableColumn ,
@@ -218,7 +220,6 @@ export default class ProgramUsersTable extends Vue {
218220 private activeProgram? : Program ;
219221 private activeUser? : User ;
220222 public users: ProgramUser [] = [];
221- public systemUsers: User [] = [];
222223
223224 private deactivateActive: boolean = false ;
224225 private newUserActive: boolean = false ;
@@ -252,7 +253,6 @@ export default class ProgramUsersTable extends Vue {
252253
253254 mounted() {
254255 this .getRoles ();
255- this .getSystemUsers ();
256256 this .paginationChanged ();
257257 }
258258
@@ -333,41 +333,40 @@ export default class ProgramUsersTable extends Vue {
333333
334334 }
335335
336- saveUser() {
336+ async saveUser() {
337337
338338 this .newUser .program = this .activeProgram ;
339339
340340 try {
341- this .newUser = this .checkExistingUserByEmail (this .newUser , this . systemUsers );
341+ this .newUser = await this .checkExistingUserByEmail (this .newUser );
342342 } catch (err ) {
343343 this .$emit (' show-error-notification' , err );
344344 this .newUserFormState .bus .$emit (DataFormEventBusHandler .SAVE_COMPLETE_EVENT );
345345 return ;
346346 }
347347
348+ // if we found a system user by email in checkExistingUserByEmail then system user exists
349+ const systemUserExisted = this .newUser .id !== undefined ;
350+
348351 ProgramUserService .create (this .newUser ).then ((user : ProgramUser ) => {
349352 this .paginationController .updatePage (1 );
350353 this .paginationController .updateOnAdd ();
351354 this .getUsers ();
352- this .getSystemUsers ();
353355
354356 // See if the user already existed
355- // TODO: Reconsider when user search feature is added
356- if (this .getSystemUserById (user , this .systemUsers )) {
357+ if (systemUserExisted ) {
357358 this .$emit (' show-success-notification' , ' Success! Existing user ' + user .name + ' added to program.' );
358359 } else {
359360 this .$emit (' show-success-notification' , ' Success! ' + this .newUser .name + ' added.' );
360361 }
361362
362363 if (this .newUser .email === this .activeUser ! .email ) this .updateActiveUser ();
363364
364- this .getSystemUsers ();
365365 this .newUser = new ProgramUser ();
366366 this .newUserActive = false ;
367367 }).catch ((error ) => {
368368 this .$emit (' show-error-notification' , error .errorMessage );
369369 this .getUsers ();
370- this .getSystemUsers ();
371370 }).finally (() => this .newUserFormState .bus .$emit (DataFormEventBusHandler .SAVE_COMPLETE_EVENT ))
372371
373372 }
@@ -379,47 +378,42 @@ export default class ProgramUsersTable extends Vue {
379378 Vue .prototype .$ability .update (rules );
380379 }
381380
382- // TODO: Reconsider when user search feature is added
383- getSystemUsers() {
381+ // TODO: Do we still want this since orcid entry is removed?
382+ async checkExistingUserByEmail(user : ProgramUser ): Promise <ProgramUser > {
383+ user .id = undefined ;
384+ // api call to check if user exists for email
385+ // this was done on front-end before because we didn't have search endpoint at the time
386+ const filter = new FilterRequest (' email' , user .email );
387+ const request = new SearchRequest (filter );
384388
385- UserService .getAll ().then (([users , metadata ]) => {
386- this .systemUsers = users ;
387- }).catch ((error ) => {
389+ try {
390+ const [users, metadata] = await UserService .search (request );
391+ // email exists
392+ if (users .length === 1 ) {
393+ user .id = users [0 ].id ;
394+ }
395+ } catch (error ) {
388396 // Display error that users cannot be loaded
389397 this .$emit (' show-error-notification' , ' Error while trying to load system users' );
390398 throw error ;
391- });
392-
393- }
394-
395- // TODO: Reconsider when user search feature is added
396- // TODO: Do we still want this since orcid entry is removed?
397- checkExistingUserByEmail(user : ProgramUser , systemUsers : User []): ProgramUser {
398- user .id = undefined ;
399- let usersFound = 0 ;
400- for (const systemUser of systemUsers ){
401- if (user .email === systemUser .email ){
402- usersFound += 1 ;
403- if (systemUser .id ){
404- user .id = systemUser .id ;
405- }
406- }
407399 }
408400
409- if (usersFound > 1 ){
410- throw " Email matches two different users." ;
411- }
412401
413402 return user ;
414403 }
415404
416- // TODO: Reconsider when user search feature is added
417- getSystemUserById( user : ProgramUser , systemUsers : User []) : User | undefined {
418- for ( const systemUser of systemUsers ) {
419- if (user . id === systemUser . id ) {
420- return systemUser ;
405+ getSystemUserById( user : ProgramUser ) : User | undefined {
406+
407+ UserService . getById ( user . id ). then (([ users , metadata ]) => {
408+ if (users . length === 1 ) {
409+ return users [ 0 ] ;
421410 }
422- }
411+ }).catch ((error ) => {
412+ // Display error that users cannot be loaded
413+ this .$emit (' show-error-notification' , ' Error while trying to load system user' );
414+ throw error ;
415+ });
416+
423417 return undefined ;
424418 }
425419
0 commit comments