@if(error$ | async; as error) {
Error

{{ error }}

} @if(successMessage$ | async; as message) {
Success

{{ message }}

} @if(!dialogMode) {
Subscription Plans

Create pricing plans for your plugin

@if(plans?.length > 0) {
}
@if(plans?.length === 0 && plansLoaded) {
Start by adding your first subscription plan to monetize your plugin
}
} @if(plansForm) {
@for(planGroup of plans.controls; track planIndex; let planIndex = $index) {
@if(isPlanLoading(planIndex)) { } @else { } {{ planGroup.get('name')?.value || 'Plan ' + (planIndex + 1) }}
@if(isExistingPlan(planIndex) && !planGroup.dirty) { } @if(planGroup.dirty) { } @if(planGroup.get('isPopular')?.value) { } @if(planGroup.get('isRecommended')?.value) { }
@if(isExistingPlan(planIndex) && planGroup.dirty) { } @if(allowMultiplePlans) { } @if(canRemovePlan()) { }
@for(type of PluginSubscriptionType | keyvalue; track type.key) { }
@if(planGroup.get('name')?.valid && planGroup.get('name')?.touched) { } @if(planGroup.get('name')?.invalid && planGroup.get('name')?.touched) { }
@if(planGroup.get('name')?.invalid && planGroup.get('name')?.touched) { Plan name is required }
@if(planGroup.get('type')?.value !== PluginSubscriptionType.FREE) {
USD ($) EUR (€) GBP (£) JPY (¥) @for(period of PluginBillingPeriod | keyvalue; track period.key) { {{ formatBillingPeriod(period.value) | titlecase }} }
} @if(planGroup.get('price')?.value >= 0) {
Preview:
@if(planGroup.get('price')?.value === 0) {
Free
} @if(planGroup.get('price')?.value > 0) {
{{ formatCurrency(planGroup.get('price')?.value, planGroup.get('currency')?.value) }} / {{ formatBillingPeriod(planGroup.get('billingPeriod')?.value) }}
}
}
@for(featureControl of getPlanFeatures(planIndex).controls; track featureIndex; let featureIndex = $index) {
@if(getPlanFeatures(planIndex).length > 1) { }
}
@for(limitationControl of getPlanLimitations(planIndex).controls; track limitationIndex; let limitationIndex = $index) {
}
@if(shouldShowAdditionalOptions(planIndex)) {
@if(isAdvancedOptionsExpanded(planIndex)) {
Mark as Popular Mark as Recommended
}
} @if(planGroup.invalid && planGroup.touched) {
Please fill in all required fields to complete this plan
}
} @if(canAddPlan()) {
} @if(!hasPlans()) {
@if(!(loading$ | async)) {
No subscription plans yet

Create your first plan to start monetizing your plugin

} @else {

Loading subscription plans...

}
}
} @else {

Initializing plan creator...

Preparing your workspace
}