@model FeatureRequestDetailsViewModel @using Microsoft.AspNetCore.Html @using System.Text.Encodings.Web @{ ViewData["Title"] = Model.Request.Title; var request = Model.Request; }

Feature Request

@request.Title

Back to requests

Request details

Status

@StatusBadge(request.Status)

Conversation

@ConversationBadge(request.ConversationState)

App area

@(request.AppArea ?? "Not set")

Importance

@(request.Importance ?? "Not set")

Updated

@FormatDate(request.UpdatedUtc)

Latest activity

@FormatNullableDate(request.LatestActivityUtc)

@request.StatusExplanation

@request.Description

Conversation

@await Html.PartialAsync("_Conversation", Model)
@functions { private static string FormatDate(DateTime value) => value.ToLocalTime().ToString("yyyy-MM-dd HH:mm"); private static string FormatNullableDate(DateTime? value) => value.HasValue ? FormatDate(value.Value) : "None yet"; private static IHtmlContent StatusBadge(string status) { var css = status switch { FeatureRequestStatuses.New => "text-bg-primary", FeatureRequestStatuses.NeedsDetail => "text-bg-warning", FeatureRequestStatuses.UnderReview => "text-bg-info", FeatureRequestStatuses.Candidate => "text-bg-secondary", FeatureRequestStatuses.Planned => "text-bg-success", FeatureRequestStatuses.InProgress => "text-bg-success", FeatureRequestStatuses.Shipped => "text-bg-dark", FeatureRequestStatuses.NotPlanned => "text-bg-light", _ => "text-bg-secondary" }; return new HtmlString($"{HtmlEncoder.Default.Encode(status)}"); } private static IHtmlContent ConversationBadge(string state) { var css = state switch { FeatureRequestConversationStates.WaitingForAdminReply => "text-bg-info", FeatureRequestConversationStates.WaitingForUserReply => "text-bg-warning", _ => "text-bg-secondary" }; return new HtmlString($"{HtmlEncoder.Default.Encode(state)}"); } } @section Scripts { }