diff --git a/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.html b/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.html index 4a48d326e..6b2032583 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.html +++ b/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.html @@ -1,12 +1,8 @@
- - Just enter the email address to invite someone with no account to the app. - -
- + @@ -16,6 +12,11 @@
+
+ +
diff --git a/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.ts b/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.ts index f1bf0cc97..2ea41f6bc 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.ts +++ b/src/Squidex/app/features/settings/pages/contributors/contributor-add-form.component.ts @@ -5,7 +5,7 @@ * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. */ -import { Component, Injectable } from '@angular/core'; +import { Component, Injectable, Input, OnInit } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { Observable } from 'rxjs'; import { withLatestFrom } from 'rxjs/operators'; @@ -16,6 +16,8 @@ import { ContributorsState, DialogModel, DialogService, + ImmutableArray, + RoleDto, UsersService } from '@app/shared'; @@ -50,7 +52,12 @@ export class UsersDataSource implements AutocompleteSource { UsersDataSource ] }) -export class ContributorAddFormComponent { +export class ContributorAddFormComponent implements OnInit { + private defaultValue: any; + + @Input() + public roles: ImmutableArray; + public assignContributorForm = new AssignContributorForm(this.formBuilder); public importDialog = new DialogModel(); @@ -63,13 +70,19 @@ export class ContributorAddFormComponent { ) { } + public ngOnInit() { + this.defaultValue = { role: this.roles.at(0).name, contributorId: '' }; + + this.assignContributorForm.submitCompleted({ newValue: this.defaultValue }); + } + public assignContributor() { const value = this.assignContributorForm.submit(); if (value) { this.contributorsState.assign(value) .subscribe(isCreated => { - this.assignContributorForm.submitCompleted(); + this.assignContributorForm.submitCompleted({ newValue: this.defaultValue }); if (isCreated) { this.dialogs.notifyInfo('A new user with the entered email address has been created and assigned as contributor.'); diff --git a/src/Squidex/app/features/settings/pages/contributors/contributor.component.ts b/src/Squidex/app/features/settings/pages/contributors/contributor.component.ts index 244dbacba..d39f594f1 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributor.component.ts +++ b/src/Squidex/app/features/settings/pages/contributors/contributor.component.ts @@ -12,6 +12,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { ContributorDto, ContributorsState, + ImmutableArray, RoleDto } from '@app/shared'; @@ -44,7 +45,7 @@ import { }) export class ContributorComponent { @Input() - public roles: RoleDto[]; + public roles: ImmutableArray; @Input() public search: string; diff --git a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html index 90619cb0b..6913d0429 100644 --- a/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html +++ b/src/Squidex/app/features/settings/pages/contributors/contributors-page.component.html @@ -29,33 +29,37 @@ - - - -
- - Big team? Add many contributors at once - -
-
- - - - + + - -
+ - -
+
+ + Big team? Add many contributors at once + +
+
+ + + + + +
+ + +
- -
- No contributors found. -
-
+ +
+ No contributors found. +
+
+ diff --git a/src/Squidex/app/shared/state/contributors.forms.ts b/src/Squidex/app/shared/state/contributors.forms.ts index 887200a0e..1f028849d 100644 --- a/src/Squidex/app/shared/state/contributors.forms.ts +++ b/src/Squidex/app/shared/state/contributors.forms.ts @@ -6,7 +6,7 @@ */ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { map } from 'rxjs/operators'; +import { debounceTime, map, shareReplay } from 'rxjs/operators'; import { Form, @@ -28,23 +28,28 @@ export class AssignContributorForm extends Form [ Validators.required ] + ], + role: [null, + [ + Validators.required + ] ] })); } - protected transformSubmit(value: { user: string | UserDto }) { + protected transformSubmit(value: { user: string | UserDto, role: string }) { let contributorId = value.user; if (Types.is(contributorId, UserDto)) { contributorId = contributorId.id; } - return { contributorId, role: 'Editor', invite: true }; + return { contributorId, role: value.string, invite: true }; } } export class ImportContributorsForm extends Form { - public numberOfEmails = value$(this.form.controls['import']).pipe(map(v => extractEmails(v).length)); + public numberOfEmails = value$(this.form.controls['import']).pipe(debounceTime(100), map(v => extractEmails(v).length), shareReplay(1)); public hasNoUser = this.numberOfEmails.pipe(map(v => v === 0));