@ -58,7 +58,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
e(Not.New("Contributor", "role"), nameof(command.Role));
}
else if (contributors.Count >= plan.MaxContributors)
else if (plan.MaxContributors > 0 && contributors.Count >= plan.MaxContributors)
{
e("You have reached the maximum number of contributors for your plan.");
@ -20,7 +20,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Services.Implementations
Name = "Infinite",
MaxApiCalls = -1,
MaxAssetSize = -1,
MaxContributors = int.MaxValue
MaxContributors = -1
};
private readonly Dictionary<string, ConfigAppLimitsPlan> plansById = new Dictionary<string, ConfigAppLimitsPlan>(StringComparer.OrdinalIgnoreCase);
@ -1,6 +1,6 @@
<sqx-title message="{app} | Plans | Settings" parameter1="app" [value1]="appsState.appName"></sqx-title>
<sqx-panel desiredWidth="64rem" [showSidebar]="true">
<sqx-panel desiredWidth="64rem" [showSidebar]="true" [scrollX]="true">
<ng-container title>
Update Plan
</ng-container>
@ -26,7 +26,7 @@
</div>
<div class="panel-main">
<div class="panel-content {{contentClass}}" [class.panel-content-scroll]="showScrollbar" [class.panel-content-blank]="isBlank">
<div class="panel-content {{contentClass}}" [class.panel-content-scroll-x]="scrollX" [class.panel-content-scroll]="showScrollbar" [class.panel-content-blank]="isBlank">
<ng-content select="[content]"></ng-content>
@ -43,6 +43,9 @@ export class PanelComponent implements AfterViewInit, OnDestroy, OnInit {
@Input()
public isLazyLoaded = true;
public scrollX = false;
public showScrollbar = false;
@ -101,6 +101,10 @@
overflow-y: scroll;
&-scroll-x {
overflow-y: auto;
& .nav-panel {
& {
margin-left: -$panel-padding;
@ -23,7 +23,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Billing
private static readonly ConfigAppLimitsPlan FreePlan = new ConfigAppLimitsPlan
@ -133,6 +133,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
[Fact]
public async Task CanAssign_should_not_throw_exception_if_user_found()
A.CallTo(() => appPlan.MaxContributors)
.Returns(-1);
var command = new AssignContributor { ContributorId = "1" };
await GuardAppContributors.CanAssign(contributors_0, roles, command, users, appPlan);