|
@@ -0,0 +1,156 @@
|
|
|
|
+@page "/domains/create"
|
|
|
|
+@using Moonlight.App.Services
|
|
|
|
+@using Moonlight.App.Database.Entities
|
|
|
|
+@using Moonlight.App.Models.Forms
|
|
|
|
+@using Moonlight.App.Repositories.Domains
|
|
|
|
+@using Microsoft.EntityFrameworkCore
|
|
|
|
+
|
|
|
|
+@inject SubscriptionService SubscriptionService
|
|
|
|
+@inject DomainService DomainService
|
|
|
|
+@inject DomainRepository DomainRepository
|
|
|
|
+@inject SharedDomainRepository SharedDomainRepository
|
|
|
|
+@inject NavigationManager NavigationManager
|
|
|
|
+@inject SmartTranslateService SmartTranslateService
|
|
|
|
+
|
|
|
|
+<LazyLoader Load="Load">
|
|
|
|
+ @if (!SharedDomains.Any())
|
|
|
|
+ {
|
|
|
|
+ <div class="d-flex justify-content-center flex-center">
|
|
|
|
+ <div class="card">
|
|
|
|
+ <img src="/assets/media/svg/nodata.svg" class="card-img-top w-25 mx-auto pt-5" alt="Not found image"/>
|
|
|
|
+ <div class="card-body text-center">
|
|
|
|
+ <h4 class="card-title">
|
|
|
|
+ <TL>No shared domain found</TL>
|
|
|
|
+ </h4>
|
|
|
|
+ <p class="card-text">
|
|
|
|
+ <TL>No shared domain found</TL>
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ <div class="d-flex flex-column flex-lg-row">
|
|
|
|
+ <div class="w-100 flex-lg-row-auto w-lg-300px mb-7 me-7 me-lg-10">
|
|
|
|
+ <div class="card card-flush py-4">
|
|
|
|
+ <div class="card-header">
|
|
|
|
+ <div class="card-title">
|
|
|
|
+ <h2>
|
|
|
|
+ <TL>Domain details</TL>
|
|
|
|
+ </h2>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="card-body pt-0">
|
|
|
|
+ <div class="d-flex flex-column gap-10">
|
|
|
|
+ @if (AllowOrder)
|
|
|
|
+ {
|
|
|
|
+ <div class="fv-row">
|
|
|
|
+ <label class="form-label">
|
|
|
|
+ <TL>Name</TL>
|
|
|
|
+ </label>
|
|
|
|
+ <div class="fw-bold fs-3">@(Model.Name)</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="fv-row">
|
|
|
|
+ <label class="form-label">
|
|
|
|
+ <TL>Shared domain</TL>
|
|
|
|
+ </label>
|
|
|
|
+ <div class="fw-bold fs-3">@(Model.SharedDomain == null ? "" : Model.SharedDomain.Name)</div>
|
|
|
|
+ </div>
|
|
|
|
+ }
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="d-flex flex-column flex-lg-row-fluid gap-7 gap-lg-10">
|
|
|
|
+ <div class="card card-flush py-4">
|
|
|
|
+ <div class="card-header">
|
|
|
|
+ <div class="card-title">
|
|
|
|
+ <h2>
|
|
|
|
+ <TL>Configure your domain</TL>
|
|
|
|
+ </h2>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="card-body pt-0">
|
|
|
|
+ <SmartForm Model="Model" OnValidSubmit="OnValidSubmit">
|
|
|
|
+ @if (AllowOrder)
|
|
|
|
+ {
|
|
|
|
+ <label class="form-label">
|
|
|
|
+ <TL>Domain</TL>
|
|
|
|
+ </label>
|
|
|
|
+ <div class="input-group mb-5">
|
|
|
|
+ <InputText @bind-Value="Model.Name" class="form-control"></InputText>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="mb-5">
|
|
|
|
+ <label class="form-label">
|
|
|
|
+ <TL>Shared domain</TL>
|
|
|
|
+ </label>
|
|
|
|
+ <SmartSelect @bind-Value="Model.SharedDomain"
|
|
|
|
+ Items="SharedDomains"
|
|
|
|
+ DisplayField="@(x => x.Name)">
|
|
|
|
+ </SmartSelect>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <button type="submit" class="mt-5 float-end btn btn-primary">
|
|
|
|
+ <TL>Create</TL>
|
|
|
|
+ </button>
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ <div class="alert alert-warning d-flex align-items-center p-5 mb-10">
|
|
|
|
+ <span>
|
|
|
|
+ <TL>You reached the maximum amount of domains in your subscription</TL>: @(Subscription == null ? SmartTranslateService.Translate("Default") : Subscription.Name)
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ }
|
|
|
|
+ </SmartForm>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ }
|
|
|
|
+</LazyLoader>
|
|
|
|
+
|
|
|
|
+@code
|
|
|
|
+{
|
|
|
|
+ [CascadingParameter]
|
|
|
|
+ public User User { get; set; }
|
|
|
|
+
|
|
|
|
+ private SharedDomain[] SharedDomains;
|
|
|
|
+
|
|
|
|
+ private Subscription? Subscription;
|
|
|
|
+
|
|
|
|
+ private bool AllowOrder = false;
|
|
|
|
+
|
|
|
|
+ private DomainOrderDataModel Model = new();
|
|
|
|
+
|
|
|
|
+ private async Task Load(LazyLoader lazyLoader)
|
|
|
|
+ {
|
|
|
|
+ Model = new();
|
|
|
|
+
|
|
|
|
+ await lazyLoader.SetText(SmartTranslateService.Translate("Loading your subscription"));
|
|
|
|
+ Subscription = await SubscriptionService.GetCurrent();
|
|
|
|
+
|
|
|
|
+ AllowOrder = DomainRepository
|
|
|
|
+ .Get()
|
|
|
|
+ .Include(x => x.Owner)
|
|
|
|
+ .Count(x => x.Owner.Id == User.Id) < (await SubscriptionService.GetLimit("domains")).Amount;
|
|
|
|
+
|
|
|
|
+ await lazyLoader.SetText("Loading shared domains");
|
|
|
|
+ SharedDomains = SharedDomainRepository.Get().ToArray();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private async Task OnValidSubmit()
|
|
|
|
+ {
|
|
|
|
+ if (DomainRepository
|
|
|
|
+ .Get()
|
|
|
|
+ .Include(x => x.Owner)
|
|
|
|
+ .Count(x => x.Owner.Id == User.Id) < (await SubscriptionService.GetLimit("domains")).Amount)
|
|
|
|
+ {
|
|
|
|
+ var domain = await DomainService.Create(Model.Name, Model.SharedDomain, User);
|
|
|
|
+
|
|
|
|
+ NavigationManager.NavigateTo($"/domain/{domain.Id}");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|