From 4da93ca348fa3953bf437d43f62907ae4088f99c Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Wed, 18 Jan 2023 21:12:13 -0700 Subject: [PATCH] better class day highlighting --- .../Features/ConfigurationTests.cs | 12 +++-- Management.Web/Data/WeatherForecast.cs | 12 ----- Management.Web/Data/WeatherForecastService.cs | 19 -------- .../Calendar.razor} | 8 ++-- Management.Web/Pages/Index.razor | 46 ++++++++++++++---- Management.Web/Pages/Modules.razor | 3 ++ Management.Web/Pages/Testing.razor | 47 ------------------- Management.Web/Program.cs | 3 +- Management.Web/Shared/NavMenu.razor | 8 ++-- .../Shared/Semester/MonthDetail.razor | 3 +- .../Features/Calendar/SemesterPlanner.cs | 15 +++--- .../Configuration/ConfigrationManagement.cs | 11 +++-- .../Configuration/IConfigurationManagement.cs | 8 ++++ 13 files changed, 84 insertions(+), 111 deletions(-) delete mode 100644 Management.Web/Data/WeatherForecast.cs delete mode 100644 Management.Web/Data/WeatherForecastService.cs rename Management.Web/{Shared/Semester/SemesterDetail.razor => Pages/Calendar.razor} (54%) create mode 100644 Management.Web/Pages/Modules.razor delete mode 100644 Management.Web/Pages/Testing.razor create mode 100644 Management/Features/Configuration/IConfigurationManagement.cs diff --git a/Management.Test/Features/ConfigurationTests.cs b/Management.Test/Features/ConfigurationTests.cs index 4783429..eed3cc1 100644 --- a/Management.Test/Features/ConfigurationTests.cs +++ b/Management.Test/Features/ConfigurationTests.cs @@ -5,7 +5,6 @@ public class ConfigurationTests [Test] public void TestCanCreateConfigFromTermAndDays() { - DateTime startAt = new DateTime(2022, 1, 1); DateTime endAt = new DateTime(2022, 1, 2); var canvasTerm = new EnrollmentTermModel( @@ -15,10 +14,13 @@ public class ConfigurationTests EndAt: endAt ); var daysOfWeek = new DayOfWeek[] { DayOfWeek.Monday }; + var management = new ConfigurationManagement(); + management.SetConfiguration(canvasTerm, daysOfWeek); + var config = management.Configuration; - var config = ConfigurationManagement.CreateFromTerm(canvasTerm, daysOfWeek); - config.StartDate.Should().Be(startAt); - config.EndDate.Should().Be(endAt); - config.Days.Should().BeEquivalentTo(daysOfWeek); + if(config == null) Assert.Fail(); + config!.StartDate.Should().Be(startAt); + config!.EndDate.Should().Be(endAt); + config!.Days.Should().BeEquivalentTo(daysOfWeek); } } \ No newline at end of file diff --git a/Management.Web/Data/WeatherForecast.cs b/Management.Web/Data/WeatherForecast.cs deleted file mode 100644 index 7aba728..0000000 --- a/Management.Web/Data/WeatherForecast.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Management.Web.Data; - -public class WeatherForecast -{ - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} diff --git a/Management.Web/Data/WeatherForecastService.cs b/Management.Web/Data/WeatherForecastService.cs deleted file mode 100644 index b637899..0000000 --- a/Management.Web/Data/WeatherForecastService.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Management.Web.Data; - -public class WeatherForecastService -{ - private static readonly string[] Summaries = new[] - { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; - - public Task GetForecastAsync(DateOnly startDate) - { - return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = startDate.AddDays(index), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }).ToArray()); - } -} diff --git a/Management.Web/Shared/Semester/SemesterDetail.razor b/Management.Web/Pages/Calendar.razor similarity index 54% rename from Management.Web/Shared/Semester/SemesterDetail.razor rename to Management.Web/Pages/Calendar.razor index 199f459..0f1dd5d 100644 --- a/Management.Web/Shared/Semester/SemesterDetail.razor +++ b/Management.Web/Pages/Calendar.razor @@ -1,15 +1,17 @@ +@page "/calendar" @using CanvasModel.EnrollmentTerms +@using Management.Web.Shared.Semester +@inject IConfigurationManagement configurationManagement @code { - [Parameter, EditorRequired] - public SemesterConfiguration Configuration { get; set; } = default!; private SemesterPlanner? semester { get; set; } protected override void OnParametersSet() { - semester = new SemesterPlanner(Configuration); + if (configurationManagement.Configuration != null) + semester = new SemesterPlanner(configurationManagement.Configuration); } } diff --git a/Management.Web/Pages/Index.razor b/Management.Web/Pages/Index.razor index 66c6754..60312a2 100644 --- a/Management.Web/Pages/Index.razor +++ b/Management.Web/Pages/Index.razor @@ -1,25 +1,57 @@ @page "/" @using CanvasModel.EnrollmentTerms @using Management.Web.Shared.Semester +@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage + @inject ICanvasService canvasService +@inject IConfigurationManagement configurationManagement +@inject ProtectedSessionStorage ProtectedSessionStore @code { private IEnumerable? terms { get; set; } = null; - private ulong? selectedTermId { get; set; } = null; + private ulong? selectedTermId { get; set; } private EnrollmentTermModel? selectedTerm { get => terms?.FirstOrDefault(t => t.Id == selectedTermId); } private List days { get; set; } = new(); private bool saved { get; set; } = false; - private SemesterConfiguration? configuration { get; set; } protected override async Task OnInitializedAsync() { terms = await canvasService.GetCurrentTermsFor(); + readTermFromConfig(); + readDaysFromConfig(); } + private void readTermFromConfig() + { + if (terms == null || configurationManagement.Configuration == null) return; + foreach (var term in terms) + { + var termInConfiguration = configurationManagement.Configuration.StartDate == term.StartAt; + if (termInConfiguration) + { + selectedTermId = term.Id; + } + } + } + + private void readDaysFromConfig() + { + if (terms == null || configurationManagement.Configuration == null) return; + + days = configurationManagement.Configuration.Days.ToList(); + } + + + public async void HandleSave() + { + saved = true; + configurationManagement.SetConfiguration(selectedTerm, days.ToArray()); + await ProtectedSessionStore.SetAsync("configuration", configurationManagement.Configuration); + } } Index @@ -60,22 +92,18 @@ @day - }
-
} -@if (configuration is not null) +@if (configurationManagement.Configuration is not null) { - +
Config complete
} \ No newline at end of file diff --git a/Management.Web/Pages/Modules.razor b/Management.Web/Pages/Modules.razor new file mode 100644 index 0000000..f79cec8 --- /dev/null +++ b/Management.Web/Pages/Modules.razor @@ -0,0 +1,3 @@ +@page "/modules" + +Weather forecast diff --git a/Management.Web/Pages/Testing.razor b/Management.Web/Pages/Testing.razor deleted file mode 100644 index 4670cc9..0000000 --- a/Management.Web/Pages/Testing.razor +++ /dev/null @@ -1,47 +0,0 @@ -@page "/testing" -@using Management.Web.Data -@inject WeatherForecastService ForecastService - -Weather forecast - -

Weather forecast

- -

This component demonstrates fetching data from a service.

- -@if (forecasts == null) -{ -

Loading...

-} -else -{ - - - - - - - - - - - @foreach (var forecast in forecasts) - { - - - - - - - } - -
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
-} - -@code { - private WeatherForecast[]? forecasts; - - protected override async Task OnInitializedAsync() - { - forecasts = await ForecastService.GetForecastAsync(DateOnly.FromDateTime(DateTime.Now)); - } -} diff --git a/Management.Web/Program.cs b/Management.Web/Program.cs index 4b85f94..59692c1 100644 --- a/Management.Web/Program.cs +++ b/Management.Web/Program.cs @@ -3,7 +3,6 @@ global using System.Text.Json; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; -using Management.Web.Data; using dotenv.net; DotEnv.Load(); @@ -13,9 +12,9 @@ var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddServerSideBlazor(); -builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); +builder.Services.AddSingleton(); var app = builder.Build(); diff --git a/Management.Web/Shared/NavMenu.razor b/Management.Web/Shared/NavMenu.razor index a1a1412..bcb1add 100644 --- a/Management.Web/Shared/NavMenu.razor +++ b/Management.Web/Shared/NavMenu.razor @@ -15,13 +15,13 @@ diff --git a/Management.Web/Shared/Semester/MonthDetail.razor b/Management.Web/Shared/Semester/MonthDetail.razor index 89a4e52..ac598c3 100644 --- a/Management.Web/Shared/Semester/MonthDetail.razor +++ b/Management.Web/Shared/Semester/MonthDetail.razor @@ -33,7 +33,8 @@ if (weekDay != null) { DayOfWeek notNullDay = weekDay ?? default; - var totalClasses = Semester.Days.Contains(notNullDay) ? $"bg-light {baseClasses}" : baseClasses; + var dayInSemester = Semester.Days.Contains(notNullDay) && day < Semester.LastDay && day > Semester.FirstDay; + var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses;
@day?.Day
} else diff --git a/Management/Features/Calendar/SemesterPlanner.cs b/Management/Features/Calendar/SemesterPlanner.cs index 6141bcd..d400a09 100644 --- a/Management/Features/Calendar/SemesterPlanner.cs +++ b/Management/Features/Calendar/SemesterPlanner.cs @@ -2,23 +2,26 @@ using CanvasModel.EnrollmentTerms; public class SemesterPlanner { + public DateTime FirstDay { get; } + public DateTime LastDay { get; } + public IEnumerable Months { get; } public IEnumerable Days { get; } public SemesterPlanner(SemesterConfiguration configuration) { - var start = configuration.StartDate; - var end = configuration.EndDate; + FirstDay = configuration.StartDate; + LastDay = configuration.EndDate; var monthsInTerm = - 1 + ((end.Year - start.Year) * 12) - + end.Month - start.Month; + 1 + ((LastDay.Year - FirstDay.Year) * 12) + + LastDay.Month - FirstDay.Month; Months = Enumerable .Range(0, monthsInTerm) .Select(monthDiff => { - var month = ((start.Month + monthDiff - 1) % 12) + 1; - var year = start.Year + ((start.Month + monthDiff - 1) / 12); + var month = ((FirstDay.Month + monthDiff - 1) % 12) + 1; + var year = FirstDay.Year + ((FirstDay.Month + monthDiff - 1) / 12); return new CalendarMonth(year, month); }); Days = configuration.Days; diff --git a/Management/Features/Configuration/ConfigrationManagement.cs b/Management/Features/Configuration/ConfigrationManagement.cs index 6fd1d3a..84f412c 100644 --- a/Management/Features/Configuration/ConfigrationManagement.cs +++ b/Management/Features/Configuration/ConfigrationManagement.cs @@ -1,8 +1,8 @@ using CanvasModel.EnrollmentTerms; -public class ConfigurationManagement +public class ConfigurationManagement : IConfigurationManagement { - public static SemesterConfiguration CreateFromTerm( + public void SetConfiguration( EnrollmentTermModel canvasTerm, DayOfWeek[] daysOfWeek ) @@ -10,10 +10,15 @@ public class ConfigurationManagement var start = canvasTerm.StartAt ?? throw new Exception($"Canvas Term must have a start date. Term: {canvasTerm.Name}"); var end = canvasTerm.EndAt ?? throw new Exception($"Canvas Term must have a end date. Term: {canvasTerm.Name}"); - return new SemesterConfiguration( + Configuration = new SemesterConfiguration( StartDate: start, EndDate: end, Days: daysOfWeek ); } + + public SemesterConfiguration? Configuration { get; private set; } = null; + + + } \ No newline at end of file diff --git a/Management/Features/Configuration/IConfigurationManagement.cs b/Management/Features/Configuration/IConfigurationManagement.cs new file mode 100644 index 0000000..541cff1 --- /dev/null +++ b/Management/Features/Configuration/IConfigurationManagement.cs @@ -0,0 +1,8 @@ +using CanvasModel.EnrollmentTerms; + +public interface IConfigurationManagement +{ + SemesterConfiguration? Configuration { get; } + + void SetConfiguration(EnrollmentTermModel canvasTerm, DayOfWeek[] daysOfWeek); +}