Lieb-Website/Lieb/Pages/Raids/RaidDetails.razor
2022-03-19 21:51:15 +01:00

138 lines
4.2 KiB
Text

@using System.Security.Claims
@using Lieb.Data
@using Lieb.Models
@using Lieb.Models.GuildWars2.Raid
@inject UserService UserService
@inject RaidService RaidService
@inject TimeZoneService TimeZoneService
@inject RaidRandomizerService RaidRandomizerService
@inject NavigationManager NavigationManager
<body>
<div @onclick="() => _isCollapsed = !_isCollapsed">
<label class="errormessage">@_errorMessage</label>
<h5>@_raid.Title
@if (_user != null && _isRaidSignUpAllowed)
{
<div class="signUpStatusTooltip">
@if(_raid.SignUps.Where(s => s.LiebUserId == _user.LiebUserId && s.SignUpType != SignUpType.SignedOff).Any())
{
<span class="oi oi-badge" style="color:green"></span>
<span class="tooltiptext">You are signed up</span>
}
else if(_raid.SignUps.Where(s => s.SignUpType == SignUpType.SignedUp).Count() < _raid.Roles.Sum(r => r.Spots))
{
<span class="oi oi-aperture nametooltip"></span>
<span class="tooltiptext">You can sign up</span>
}
else
{
<span class="oi oi-ban nametooltip" style="color:red"></span>
<span class="tooltiptext">The raid is full</span>
}
</div>
}
</h5>
<label style="white-space: pre-line">@_raid.Description</label>
<span class="timesblock">
<span class="times">
<h5>Date</h5>
<p>@_startTime.DateTime.ToLongDateString()</p>
</span>
<span class="times">
<h5>Time</h5>
<p>from: @_startTime.DateTime.ToShortTimeString() to: @_endTime.DateTime.ToShortTimeString()</p>
</span>
</span>
</div>
@if (!_isCollapsed)
{
<span class="detailsblock">
<span class="details">
<h5>Organizer</h5>
<p>@_raid.Organizer</p>
</span>
<span class="details">
<h5>Guild</h5>
<p>@_raid.Guild</p>
</span>
<span class="details">
<h5>Voice chat</h5>
<p>@_raid.VoiceChat</p>
</span>
</span>
<RaidRoles _Parent=@this _raid=@_raid _user=@_user _isRaidSignUpAllowed=@_isRaidSignUpAllowed/>
<div>
<AuthorizeView>
<button class="controlButton raidButton" @onclick="() => SignOffClicked()">Sign Off</button>
</AuthorizeView>
<AuthorizeView Policy="@Constants.Roles.RaidLead">
<button class="controlButton raidButton" @onclick="() => EditClicked()">Edit</button>
@if (_raid.RaidType != RaidType.Planned)
{
<button class="controlButton raidButton" type=button @onclick="() => RandomizeClicked()">Randomize</button>
}
</AuthorizeView>
</div>
}
</body>
@code {
[Parameter]
public Raid _raid { get; set; }
[Parameter]
public LiebUser? _user { get; set; }
bool _isRaidSignUpAllowed;
string _errorMessage;
private DateTimeOffset _startTime;
private DateTimeOffset _endTime;
private DateTimeOffset _freeForAllTime;
bool _isCollapsed = true;
protected override async Task OnParametersSetAsync()
{
_isRaidSignUpAllowed = _user != null && RaidService.IsRaidSignUpAllowed(_user.LiebUserId, _raid.RaidId, out _errorMessage);
_startTime = await TimeZoneService.GetLocalDateTime(_raid.StartTimeUTC);
_endTime = await TimeZoneService.GetLocalDateTime(_raid.EndTimeUTC);
_freeForAllTime = await TimeZoneService.GetLocalDateTime(_raid.FreeForAllTimeUTC);
}
async Task SignOffClicked()
{
await RaidService.SignOff(_raid.RaidId, _user.LiebUserId);
_raid = RaidService.GetRaid(_raid.RaidId);
}
async Task EditClicked()
{
NavigationManager.NavigateTo($"raidedit/{_raid.RaidId}");
}
async Task RandomizeClicked()
{
await RaidRandomizerService.RandomizeRaid(_raid.RaidId);
_raid = RaidService.GetRaid(_raid.RaidId);
}
public void HasChanged()
{
_raid = RaidService.GetRaid(_raid.RaidId);
this.StateHasChanged();
}
}