Files
Moonlight/Moonlight/Features/Ticketing/UI/Components/TicketPopupCreate.razor
2024-01-26 13:53:34 +01:00

83 lines
2.8 KiB
Plaintext

@using Moonlight.Core.Exceptions
@using Moonlight.Core.Repositories
@using Moonlight.Core.Services
@using Moonlight.Features.ServiceManagement.Entities
@using Moonlight.Features.Ticketing.Models.Forms
@using Moonlight.Features.Ticketing.Services
@inject IdentityService IdentityService
@inject Repository<Service> ServiceRepository
@inject TicketService TicketService
<div class="card-header">
<span class="card-title fs-5">Create a new ticket</span>
<div class="card-toolbar">
<button @onclick="() => TicketPopupMain.SetViewIndex(1)" class="btn btn-rounded-circle btn-icon">
<i class="bx bx-sm bx-chevron-left"></i>
</button>
</div>
</div>
<div class="card-body" style="width: 45vh; overflow-y: scroll">
<LazyLoader Load="LoadServices">
<SmartForm Model="Form" OnValidSubmit="CreateTicket">
<div class="mb-5">
<label class="form-label">Name</label>
<input @bind="Form.Name" class="form-control" type="text"/>
</div>
<div class="mb-5">
<label class="form-label">Description</label>
<textarea @bind="Form.Description" class="form-control"></textarea>
</div>
<div class="mb-5">
<label class="form-label">Tries</label>
<textarea @bind="Form.Tries" class="form-control"></textarea>
</div>
<div class="mb-5">
<label class="form-label">Service</label>
<SmartSelect TField="Service"
@bind-Value="Form.Service"
Items="Services"
DisplayField="@(x => x.Nickname ?? $"Service {x.Id}")"
CanBeNull="true"/>
</div>
<div class="d-flex justify-content-center">
<button class="btn btn-primary" type="submit">Create</button>
</div>
</SmartForm>
</LazyLoader>
</div>
@code
{
[CascadingParameter]
public TicketPopupMain TicketPopupMain { get; set; }
private Service[] Services;
private CreateTicketForm Form = new();
private async Task LoadServices(LazyLoader lazyLoader)
{
await lazyLoader.SetText("Loading your services");
Services = ServiceRepository
.Get()
.Where(x => x.Owner.Id == IdentityService.CurrentUser.Id)
.ToArray();
}
private async Task CreateTicket()
{
// Prevent some annoying users
if (Form.Description.Trim().ToLower() == Form.Tries.Trim().ToLower())
throw new DisplayException("Please fill out the form correctly");
var ticket = await TicketService.Create.Perform(
Form.Name,
Form.Description,
Form.Tries,
Form.Service
);
await TicketPopupMain.OpenTicket(ticket);
}
}