Added TimeZone Functionality

This commit is contained in:
t.ruspekhofer 2022-03-10 22:34:47 +01:00
parent c298f4d20e
commit c215ed058f
9 changed files with 129 additions and 48 deletions

View file

@ -4,6 +4,7 @@
@using Lieb.Models.GuildWars2.Raid
@inject UserService UserService
@inject RaidService RaidService
@inject TimeZoneService TimeZoneService
@inject RaidRandomizerService RaidRandomizerService
<body>
@ -17,11 +18,11 @@
<div >
<div class="times">
<h5>Date</h5>
<p>@_raid.Date.ToLongDateString()</p>
<p>@_startTime.DateTime.ToLongDateString()</p>
</div>
<div class="times">
<h5>Time</h5>
<p>from: @_raid.StartTime.LocalDateTime.ToShortTimeString() to: @_raid.EndTime.LocalDateTime.ToShortTimeString()</p>
<p>from: @_startTime.LocalDateTime.ToShortTimeString() to: @_endTime.LocalDateTime.ToShortTimeString()</p>
</div>
</div>
@ -72,7 +73,6 @@
</body>
@code {
[Parameter]
public Raid _raid { get; set; }
@ -83,9 +83,17 @@
string _errorMessage;
private DateTimeOffset _startTime;
private DateTimeOffset _endTime;
private DateTimeOffset _freeForAllTime;
protected override async Task OnInitializedAsync()
{
_isRaidSignUpAllowed = _user != null && RaidService.IsRaidSignUpAllowed(_user.LiebUserId, _raid.RaidId, out string _errorMessage);
_startTime = await TimeZoneService.GetLocalDateTime(_raid.StartTimeUTC);
_endTime = await TimeZoneService.GetLocalDateTime(_raid.EndTimeUTC);
_freeForAllTime = await TimeZoneService.GetLocalDateTime(_raid.FreeForAllTimeUTC);
}
async Task SignUpClicked(PlannedRaidRole role, LiebUser liebUser, bool isSignedUp, SignUpType signUpType)

View file

@ -4,6 +4,7 @@
@using Lieb.Models.GuildWars2.Raid
@using System.ComponentModel.DataAnnotations
@inject RaidService RaidService
@inject TimeZoneService TimeZoneService
@inject NavigationManager NavigationManager
@inject IJSRuntime JsRuntime
@ -13,7 +14,6 @@
<AuthorizeView Policy="@Constants.Roles.RaidLead" Context="authorizationContext">
<EditForm Model="@_raid" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
@{
bool _isEdit = _raid.RaidId != 0;
}
@ -44,20 +44,20 @@
<p>
<label>
Date:
<InputDate @bind-Value="_raid.Date" />
<InputDate @bind-Value="_raidDate" />
</label>
</p>
<p>
<label>
Start Time:
<input type="time" @bind="@_raid.StartTime" />
<input type="time" @bind="_startTime" />
</label>
</p>
<p>
<label>
End Time:
<input type="time" @bind="@_raid.EndTime" />
<input type="time" @bind="_endTime" />
</label>
</p>
@ -109,7 +109,9 @@
</table>
</p>
}
<ValidationSummary />
<label class="validation-message" >@_errosMessage</label>
<button type="submit">Submit</button>
</EditForm>
@ -124,12 +126,26 @@
public Raid _raid;
private string _errosMessage = string.Empty;
private DateTimeOffset _raidDate = DateTime.Now.Date;
private DateTimeOffset _startTime;
private DateTimeOffset _endTime;
private DateTimeOffset _freeForAllDate = DateTime.Now.Date;
private DateTimeOffset _freeForAllTime;
protected override async Task OnInitializedAsync()
{
if(!string.IsNullOrEmpty(raidId) && int.TryParse(raidId, out int parsedId))
{
_raid = RaidService.GetRaid(parsedId);
_startTime = await TimeZoneService.GetLocalDateTime(_raid.StartTimeUTC);
_endTime = await TimeZoneService.GetLocalDateTime(_raid.EndTimeUTC);
_raidDate = _startTime.Date;
_freeForAllTime = await TimeZoneService.GetLocalDateTime(_raid.FreeForAllTimeUTC);
_freeForAllDate = _freeForAllTime.Date;
}
else
{
@ -160,8 +176,9 @@
private async Task HandleValidSubmit()
{
if(_raid.RaidType != RaidType.Planned && _raid.Roles.Count == 0)
if(_raid.RaidType != RaidType.Planned)
{
_raid.Roles.Clear();
_raid.Roles.Add(new PlannedRaidRole()
{
Spots = 10,
@ -170,6 +187,25 @@
});
}
if(_raid.Roles.Count == 0)
{
_errosMessage = "Roles are needed for a raid.";
return;
}
_raid.TimeZone = await TimeZoneService.GetUserTimeZone();
_raid.StartTimeUTC = await TimeZoneService.GetUTCDateTime(_raidDate.Date + _startTime.TimeOfDay);
if(_startTime.TimeOfDay > _endTime.TimeOfDay)
{
_raid.EndTimeUTC = await TimeZoneService.GetUTCDateTime(_raidDate.Date + _endTime.TimeOfDay);
}
else
{
_raid.EndTimeUTC = await TimeZoneService.GetUTCDateTime(_raidDate.Date.AddDays(1) + _endTime.TimeOfDay);
}
_raid.FreeForAllTimeUTC = await TimeZoneService.GetUTCDateTime(_freeForAllDate.Date + _freeForAllTime.TimeOfDay);
await RaidService.AddOrEditRaid(_raid);
NavigationManager.NavigateTo("raidoverview");
}

View file

@ -7,3 +7,14 @@
@(await Html.RenderComponentAsync<App>(RenderMode.Server))
<!--<component type="typeof(App)" render-mode="ServerPrerendered" />-->
<script>
function GetTimezoneValue() {
// Returns the time difference in minutes between UTC time and local time.
return new Date().getTimezoneOffset();
}
</script>
<script>
function GetTimezone() {
return new Intl.DateTimeFormat().resolvedOptions().timeZone;
}
</script>

View file

@ -1,18 +0,0 @@
<environment names="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment names="Staging,Production">
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.17.0/jquery.validate.min.js"
asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator"
crossorigin="anonymous"
integrity="sha384-rZfj/ogBloos6wzLGpPkkOr/gpkBNLZ6b6yLy4o+ok+t/SAKlL5mvXLr0OXNi1Hp">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.9/jquery.validate.unobtrusive.min.js"
asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"
crossorigin="anonymous"
integrity="sha384-ifv0TYDWxBHzvAk2Z0n8R434FL1Rlv/Av18DXE43N/1rvHyOG4izKst0f2iSLdds">
</script>
</environment>