67 lines
2.8 KiB
Plaintext
67 lines
2.8 KiB
Plaintext
@model CalendarSyncApp.Models.HomeViewModel
|
|
|
|
@{
|
|
ViewData["Title"] = "Calendar Sync Status";
|
|
}
|
|
|
|
<div class="text-center">
|
|
<h1 class="display-4">Calendar Sync Dashboard</h1>
|
|
|
|
@if (User.Identity.IsAuthenticated)
|
|
{
|
|
<div class="card mt-4">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Welcome, @User.Identity.Name</h5>
|
|
@if (Model.UserState != null)
|
|
{
|
|
<p class="card-text">Status: <strong>@Model.UserState.LastSyncStatus</strong></p>
|
|
<p class="card-text">Last Sync Time: @(Model.UserState.LastSyncTime?.ToString("g") ?? "Never")</p>
|
|
<p class="card-text">Next Scheduled Sync: <strong>@(Model.NextSyncTime?.ToString("g") ?? "Pending")</strong></p>
|
|
|
|
<a asp-action="SyncNow" class="btn btn-primary">Sync Now</a>
|
|
|
|
<div class="mt-5 text-start">
|
|
<h4>Recent Synced Events</h4>
|
|
<table class="table table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Event</th>
|
|
<th>Type</th>
|
|
<th>Time</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@foreach (var log in Model.RecentLogs)
|
|
{
|
|
<tr>
|
|
<td>@log.EventSubject</td>
|
|
<td>
|
|
<span class="badge @(log.ChangeType == "Deleted" ? "bg-danger" : (log.ChangeType == "Created" ? "bg-success" : "bg-warning text-dark"))">
|
|
@log.ChangeType
|
|
</span>
|
|
</td>
|
|
<td>@log.Timestamp.ToLocalTime().ToString("g")</td>
|
|
</tr>
|
|
}
|
|
@if (!Model.RecentLogs.Any())
|
|
{
|
|
<tr>
|
|
<td colspan="3" class="text-center text-muted">No recent events found.</td>
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|
|
else
|
|
{
|
|
<div class="alert alert-info mt-4">
|
|
<p>Please sign in to enable calendar synchronization.</p>
|
|
<a asp-action="SignIn" class="btn btn-primary btn-lg">Sign In with Microsoft</a>
|
|
</div>
|
|
}
|
|
</div>
|