@page "/raidtemplateedit" @page "/raidtemplateedit/{raidId}" @page "/raidtemplateedit/{raidId}/{editType}" @using Lieb.Data @using Lieb.Models @using Lieb.Models.GuildWars2.Raid @using System.ComponentModel.DataAnnotations @using System.Security.Claims @using SharedClasses.SharedModels @inject RaidTemplateService RaidTemplateService @inject RaidService RaidService @inject UserService UserService @inject DiscordService DiscordService @inject TimeZoneService TimeZoneService @inject NavigationManager NavigationManager @inject AuthenticationStateProvider AuthenticationStateProvider @inject IJSRuntime JsRuntime

Create or edit Template

@{ bool _isEdit = _template.RaidTemplateId != 0; }

@if(_template.RaidType != RaidType.Planned) {

}

@if(_isMultiDay) {

} else {

}

@if(_template.RaidType == RaidType.Planned) {

@foreach( RaidRole role in _template.Roles) { }
Spots Role name Description

}

@code { [Parameter] public string raidId { get; set; } [Parameter] public string editType { get; set; } public RaidTemplate _template; private LiebUser _user; private bool _editType = false; private string _errorMessage = string.Empty; private int _randomSpots = 10; private bool _isMultiDay = false; private DateTimeOffset _raidDate = DateTime.Now.Date; private DateTimeOffset _endDate = DateTime.Now.Date; private DateTimeOffset _startTime; private DateTimeOffset _endTime; private DateTimeOffset _freeForAllDate = DateTime.Now.Date; private DateTimeOffset _freeForAllTime; private DateTimeOffset _minUserDeadlineDate = DateTime.Now.Date; private DateTimeOffset _minUserDeadlineTime; private string _userTimeZone = string.Empty; private List _rolesToDelete = new List(); private List _remindersToDelete = new List(); private List _messagesToDelete = new List(); private List _staticReminders = new List(); private List _dynamicReminders = new List(); private List _discordServers = new List(); private List _availabeGroups = new List(); protected override async Task OnInitializedAsync() { var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); if (authState != null) { ulong discordId = ulong.Parse(authState.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value); _user = UserService.GetLiebUser(discordId); } if(_user == null) { NavigationManager.NavigateTo(""); } if(!string.IsNullOrEmpty(editType) && bool.TryParse(editType, out bool allowEdit)) { _editType = allowEdit; } if(!string.IsNullOrEmpty(raidId) && int.TryParse(raidId, out int parsedId)) { _template = RaidTemplateService.GetTemplate(parsedId); if (_template != null && (_template.RaidOwnerId == _user.Id || _user.RoleAssignments.Max(a => a.LiebRole.Level) >= Constants.RaidEditPowerLevel)) { if(_template.RaidType != RaidType.Planned) { if(_template.Roles.Where(r => r.IsRandomSignUpRole).Any()) { RaidRole role = _template.Roles.FirstOrDefault(r => r.IsRandomSignUpRole); _randomSpots = role != null ? role.Spots : 10; } } _startTime = _template.StartTime; _endTime = _template.EndTime; _raidDate = _startTime.Date; _endDate = _endTime.Date; _freeForAllTime = _template.FreeForAllTime; _freeForAllDate = _freeForAllTime.Date; _minUserDeadlineTime = _template.MinUserDeadLine; _minUserDeadlineDate = _minUserDeadlineTime.Date; _isMultiDay = _endTime - _startTime > new TimeSpan(24,0,0); foreach(RaidReminder reminder in _template.Reminders) { if(reminder.TimeType == RaidReminder.ReminderTimeType.Static) { DateTimeOffset reminderTime = await TimeZoneService.GetLocalDateTime(reminder.ReminderTimeUTC); DateTimeOffset reminderDate = (await TimeZoneService.GetLocalDateTime(reminder.ReminderTimeUTC)).Date; _staticReminders.Add(new StaticRaidReminder(reminder, reminderDate, reminderTime)); } else { _dynamicReminders.Add(new DynamicRaidReminder(reminder, _template.StartTime)); } } } else { _template = new RaidTemplate(); _dynamicReminders.Add(DynamicRaidReminder.Create30MinReminder()); } } else { _template = new RaidTemplate(); _dynamicReminders.Add(DynamicRaidReminder.Create30MinReminder()); } _userTimeZone = await TimeZoneService.GetUserTimeZone(); _discordServers = await DiscordService.GetServers(); _availabeGroups = UserService.GetUserRoles(_user.Id).Where(u => u.Type == RoleType.UserDefinedRole).ToList(); } async Task AddRoleClicked() { _template.Roles.Add(new RaidRole()); } async Task DeleteRoleClicked(RaidRole role) { if(role.RaidRoleId != 0) { _rolesToDelete.Add(role); } _template.Roles.Remove(role); } async Task DeleteRaidClicked() { bool confirmed = await JsRuntime.InvokeAsync("confirm", "Are you sure you want to delete the raid?"); if (confirmed) { await RaidTemplateService.DeleteTemplate(_template.RaidTemplateId, _user.Id); NavigationManager.NavigateTo("raidtemplateoverview"); } } private async Task HandleValidSubmit() { if(_template.RaidType != RaidType.Planned) { if(!_template.Roles.Where(r => r.IsRandomSignUpRole).Any()) { _template.Roles.Add(RaidService.CreateRandomSignUpRole(_template.RaidType, _randomSpots)); } else { _template.Roles.First(r => r.IsRandomSignUpRole).Spots = _randomSpots; } foreach(RaidRole role in _template.Roles.Where(r => !r.IsRandomSignUpRole)) { _rolesToDelete.Add(role); } } if(_template.Roles.Count == 0) { _errorMessage = "Roles are needed for a raid."; return; } if(_isMultiDay && _endDate <= _raidDate) { _errorMessage = "The end date has to be after the start date."; return; } _template.TimeZone = await TimeZoneService.GetUserTimeZone(); _template.StartTime =_raidDate.Date + _startTime.TimeOfDay; if(_isMultiDay) { _template.EndTime = _endDate.Date + _endTime.TimeOfDay; } else if(_startTime.TimeOfDay <= _endTime.TimeOfDay) { _template.EndTime = _raidDate.Date + _endTime.TimeOfDay; } else { _template.EndTime = _raidDate.Date.AddDays(1) + _endTime.TimeOfDay; } _template.FreeForAllTime = _freeForAllDate.Date + _freeForAllTime.TimeOfDay; _template.MinUserDeadLine = _minUserDeadlineDate.Date + _minUserDeadlineTime.TimeOfDay; if (!_template.RaidOwnerId.HasValue) { _template.RaidOwnerId = _user.Id; } _template.Reminders.Clear(); foreach(DynamicRaidReminder reminder in _dynamicReminders) { reminder.ReminderTimeUTC = _template.StartTime - new TimeSpan(reminder.DaysBeforeRaid, reminder.HoursBeforeRaid, reminder.MinutesBeforeRaid, 0); reminder.Sent = true; _template.Reminders.Add(reminder); } foreach(StaticRaidReminder reminder in _staticReminders) { reminder.ReminderTimeUTC = reminder.ReminderDate.Date + reminder.ReminderTime.TimeOfDay; reminder.Sent = true; _template.Reminders.Add(reminder); } await RaidTemplateService.AddOrEditTemplate(_template, _rolesToDelete, _remindersToDelete, _messagesToDelete, _user.Id); NavigationManager.NavigateTo("raidtemplateoverview"); } private async Task CopyTemplate() { RaidTemplate newTemplate = new RaidTemplate(_template); await RaidTemplateService.AddOrEditTemplate(newTemplate, new List(), new List(), new List(), _user.Id); NavigationManager.NavigateTo($"/raidtemplateedit/{newTemplate.RaidTemplateId}/true", true); } }