Implemented domain order. Fixed some bugs

This commit is contained in:
Marcel Baumgartner
2023-04-11 21:36:25 +02:00
parent dacf9f606f
commit 3189f901a8
9 changed files with 278 additions and 15 deletions

View File

@@ -6,10 +6,11 @@
@using Moonlight.App.Services
@inject DomainRepository DomainRepository
@inject DomainService DomainService
@inject SmartTranslateService SmartTranslateService
<OnlyAdmin>
<LazyLoader Load="Load">
<LazyLoader @ref="LazyLoader" Load="Load">
<div class="row">
<div class="card">
<div class="card-header border-0 pt-5">
@@ -47,11 +48,9 @@
</Column>
<Column TableItem="Domain" Title="" Field="@(x => x.Id)" Sortable="false" Filterable="false" Width="10%">
<Template>
<WButton Text="@(SmartTranslateService.Translate("Delete"))"
WorkingText="@(SmartTranslateService.Translate("Deleting"))"
CssClasses="btn-sm btn-danger"
OnClick="() => Delete(context)">
</WButton>
<DeleteButton Confirm="true"
OnClick="() => Delete(context)">
</DeleteButton>
</Template>
</Column>
</Table>
@@ -65,6 +64,7 @@
@code
{
private Domain[] Domains;
private LazyLoader LazyLoader;
private Task Load(LazyLoader arg)
{
@@ -79,5 +79,7 @@
private async Task Delete(Domain context)
{
await DomainService.Delete(context);
await LazyLoader.Reload();
}
}

View File

@@ -4,13 +4,12 @@
@using Moonlight.App.Models.Forms
@using Moonlight.App.Repositories
@using Moonlight.App.Repositories.Domains
@using Mappy.Net
@inject SmartTranslateService SmartTranslateService
@inject SharedDomainRepository SharedDomainRepository
@inject DomainRepository DomainRepository
@inject UserRepository UserRepository
@inject NavigationManager NavigationManager
@inject DomainService DomainService
<OnlyAdmin>
<div class="row mb-5">
@@ -66,14 +65,10 @@
return Task.CompletedTask;
}
private Task Add()
private async Task Add()
{
var domain = Mapper.Map<Domain>(Model);
DomainRepository.Add(domain);
await DomainService.Create(Model.Name, Model.SharedDomain, Model.Owner);
NavigationManager.NavigateTo("/admin/domains");
return Task.CompletedTask;
}
}

View File

@@ -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}");
}
}
}

View File

@@ -3,6 +3,7 @@
@using Moonlight.App.Database.Entities
@using Moonlight.App.Models.Forms
@using Moonlight.App.Repositories
@using Microsoft.EntityFrameworkCore
@inject SubscriptionService SubscriptionService
@inject WebsiteService WebsiteService
@@ -123,7 +124,10 @@
await lazyLoader.SetText(SmartTranslateService.Translate("Searching for deploy plesk server"));
PleskServer = await SmartDeployService.GetPleskServer();
AllowOrder = WebsiteRepository.Get().Count() < (await SubscriptionService.GetLimit("websites")).Amount;
AllowOrder = WebsiteRepository
.Get()
.Include(x => x.Owner)
.Count(x => x.Owner.Id == User.Id) < (await SubscriptionService.GetLimit("websites")).Amount;
}
private async Task OnValidSubmit()