Skip to content

Commit d2d4f99

Browse files
authored
Prevent release with critical failures (#8198)
* Fatal warning created for testing, LightMode ok * Dark mode color palette complete * Solarized palette chosen, links still to go * Color change * Color change for all elements complete * Diagnostics check added and functional * Approval click triggers correct UI window based on conditions * In process of refactoring * Handler created and working, still drying up code * Working on refactor, but with Approve button * Refactored, functioning, next: double check for typos * Issue complete - user now notified about fatal diagnostics and must override to approve * PR changes complete
1 parent 43b4ead commit d2d4f99

11 files changed

Lines changed: 223 additions & 59 deletions

File tree

src/dotnet/APIView/APIView/Model/CodeDiagnosticLevel.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public enum CodeDiagnosticLevel
77
Default = 0,
88
Info = 1,
99
Warning = 2,
10-
Error = 3
10+
Error = 3,
11+
Fatal = 4
1112
}
1213
}

src/dotnet/APIView/APIViewWeb/Client/css/pages/review.scss

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,28 @@
8787
font-size: medium;
8888
}
8989

90+
.form-check.override-check {
91+
padding-left: 4rem;
92+
padding-bottom: 1.5rem;
93+
}
94+
95+
.modal-body.check-description {
96+
padding-bottom: .5rem;
97+
}
98+
99+
.form-check.convo-check {
100+
padding-left: 4rem;
101+
padding-bottom: 1.5rem;
102+
}
103+
104+
.modal-body.convo-label {
105+
padding-bottom: 0;
106+
}
107+
108+
.modal-body.convo-label.combo-check {
109+
padding-top: 0;
110+
}
111+
90112
.approval-list-group-item {
91113
list-style-type: none;
92114
}

src/dotnet/APIView/APIViewWeb/Client/css/shared/codeline.scss

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -355,23 +355,58 @@ code {
355355
color: #008509 !important;
356356
}
357357

358-
.code-diagnostics-error {
359-
background-color: var(--code-diagnostics-error-color);
360-
border: 1px solid red;
358+
$diagnostics: (
359+
fatal: var(--code-diagnostics-fatal-color),
360+
error: var(--code-diagnostics-error-color),
361+
warn: var(--code-diagnostics-warn-color),
362+
info: var(--code-diagnostics-info-color) );
363+
364+
@each $type, $color in $diagnostics {
365+
.code-diagnostics-#{$type} {
366+
background-color: $color;
367+
}
361368
}
362369

363-
.code-diagnostics-warn {
364-
background-color: var(--code-diagnostics-warn-color);
365-
border: 1px solid #ffe066;
370+
.code-diagnostics p {
371+
margin: 0;
366372
}
367373

368-
.code-diagnostics-info {
369-
background-color: var(--code-diagnostics-info-color);
370-
border: 1px solid blue;
374+
.light-theme .code-diagnostics p a {
375+
376+
&:active,
377+
&:hover {
378+
color: var(--details-link-active-hover);
379+
}
371380
}
372381

373-
.code-diagnostics p {
374-
margin: 0;
382+
.dark-theme .code-diagnostics p {
383+
color: #e6eff7;
384+
385+
a {
386+
color: var(--details-link-color);
387+
388+
&:visited {
389+
color: var(--details-link-visited);
390+
}
391+
392+
&:active,
393+
&:hover {
394+
color: var(--details-link-active-hover);
395+
}
396+
}
397+
}
398+
399+
.dark-solarized-theme .code-diagnostics a {
400+
color: var(--details-link-color);
401+
402+
&:visited {
403+
color: var(--details-link-visited);
404+
}
405+
406+
&:active,
407+
&:hover {
408+
color: var(--details-link-active-hover);
409+
}
375410
}
376411

377412
.code-diagnostics div {
@@ -385,5 +420,4 @@ code {
385420
color: var(--text-muted-color) !important;
386421
font-style: italic;
387422
}
388-
389423
/*---------------------------------------------------------------------*/

src/dotnet/APIView/APIViewWeb/Client/css/shared/theme-colors.scss

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
--link-color: #{$primary};
2222
--link-active: #{shade-color($primary, 20%)};
2323
--link-visited: #{shade-color($primary, 40%)};
24+
/*----Diagnostic Details Link------------------------------------*/
25+
--details-link-color: #{$primary};
26+
--details-link-active-hover: #00CBEB;
27+
--link-visited: #{shade-color($primary, 40%)};
2428
/*----Shadows and Glows------------------------------------------*/
2529
--outer-glow: #{tint-color($primary, 80%)};
2630
--shadow-color: rgba(#{$black}, .15);
@@ -42,10 +46,10 @@
4246
--name-color: #{$base-text-color};
4347
--code-color: #d1377e;
4448
--code-comment: green;
45-
--code-diagnostics-error-color: lightpink;
46-
--code-diagnostics-warn-color: lightyellow;
47-
--code-diagnostics-info-color: lightblue;
48-
--code-added: #cee9d3;
49+
--code-diagnostics-error-color: #ffcfad;
50+
--code-diagnostics-warn-color: #ffeea3;
51+
--code-diagnostics-info-color: #c8e6e5;
52+
--code-diagnostics-fatal-color: #f5a3b9;
4953
--code-removed: #fdcfce;
5054
--code-delta: #fdefc6;
5155
/*----SVG-------------------------------------------------*/
@@ -76,6 +80,10 @@
7680
--link-color: #{$primary-color};
7781
--link-active: #{tint-color($primary-color, 20%)};
7882
--link-visited: #{tint-color($primary-color, 40%)};
83+
/*----Diagnostic Details Link------------------------------------*/
84+
--details-link-color: #0d1dfc;
85+
--details-link-active-hover: #00CBEB;
86+
--details-link-visited: #3d4afd;
7987
/*----Shadows and Glows------------------------------------------*/
8088
--outer-glow: #{tint-color($primary-color, 80%)};
8189
--shadow-color: rgba(#{$white}, .15);
@@ -97,10 +105,10 @@
97105
--name-color: #{$base-text-color};
98106
--code-color: #db3984;
99107
--code-comment: green;
100-
--code-diagnostics-error-color: darkmagenta;
101-
--code-diagnostics-warn-color: #846007;
102-
--code-diagnostics-info-color: darkblue;
103-
--code-added: #14432d;
108+
--code-diagnostics-error-color: #bf6b2e;
109+
--code-diagnostics-warn-color: #bd9b00;
110+
--code-diagnostics-info-color: #489491;
111+
--code-diagnostics-fatal-color: #a10e5f;
104112
--code-removed: #491d24;
105113
--code-delta: #4c401a;
106114
/*----SVG-------------------------------------------------*/
@@ -133,6 +141,10 @@
133141
--link-color: #{$primary-color};
134142
--link-active: #{tint-color($primary-color, 10%)};
135143
--link-visited: #{tint-color($primary-color, 20%)};
144+
/*----Diagnostic Details Link------------------------------------*/
145+
--details-link-color: #0d1dfc;
146+
--details-link-active-hover: #00CBEB;
147+
--details-link-visited: #3d4afd;
136148
/*----Shadows and Glows------------------------------------------*/
137149
--outer-glow: #{tint-color($primary-color, 80%)};
138150
--shadow-color: rgba(#{$gray-100}, .15);
@@ -154,9 +166,10 @@
154166
--name-color: #{$base-text-color};
155167
--code-color: #db3984;
156168
--code-comment: #8a9898;
157-
--code-diagnostics-error-color: #ff4c59;
158-
--code-diagnostics-warn-color: #e3a710;
159-
--code-diagnostics-info-color: #5197f0;
169+
--code-diagnostics-error-color: #d18654;
170+
--code-diagnostics-warn-color: #d1ba56;
171+
--code-diagnostics-info-color: #5da6a3;
172+
--code-diagnostics-fatal-color: #d15a74;
160173
--code-added: #345039;
161174
--code-removed: #5d3837;
162175
--code-delta: #695b32;

src/dotnet/APIView/APIViewWeb/Client/src/pages/review.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,4 +369,18 @@ $(() => {
369369
}
370370
}
371371
});
372+
373+
/* MODAL WINDOW BUTTON AVAILABILITY
374+
--------------------------------------------------------------------------------------------------------------------------------------------------------*/
375+
$("#overrideDiag, #overrideConvo").on('change', function () {
376+
var allChecked = true;
377+
if ($("#overrideDiag").length && $("#overrideConvo").length) {
378+
allChecked = $("#overrideDiag").is(":checked") && $("#overrideConvo").is(":checked");
379+
} else if ($("#overrideDiag").length) {
380+
allChecked = $("#overrideDiag").is(":checked");
381+
} else if ($("#overrideConvo").length) {
382+
allChecked = $("#overrideConvo").is(":checked");
383+
}
384+
$("#confirmButton").prop("disabled", !allChecked);
385+
});
372386
});

src/dotnet/APIView/APIViewWeb/Helpers/PageModelHelpers.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using Microsoft.Extensions.Configuration;
1717
using Microsoft.AspNetCore.Http;
1818
using Microsoft.AspNetCore.Mvc;
19+
using APIViewWeb.Pages.Assemblies;
1920

2021
namespace APIViewWeb.Helpers
2122
{
@@ -385,6 +386,7 @@ public static async Task<ReviewContentModel> GetReviewContentAsync(
385386
reviewPageContent.ActiveAPIRevision = activeRevision;
386387
reviewPageContent.DiffAPIRevision = diffRevision;
387388
reviewPageContent.TotalActiveConversations = comments.Threads.Count(t => !t.IsResolved);
389+
reviewPageContent.HasFatalDiagnostics = fileDiagnostics.Any(d => d.Level == APIView.CodeDiagnosticLevel.Fatal);
388390
reviewPageContent.ActiveConversationsInActiveAPIRevision = ComputeActiveConversationsInActiveRevision(activeRevisionHtmlLines, comments);
389391
reviewPageContent.ActiveConversationsInSampleRevisions = comments.Threads.Count(t => t.Comments.FirstOrDefault()?.CommentType == CommentType.SampleRevision);
390392
reviewPageContent.PreferredApprovers = preferredApprovers;
@@ -592,5 +594,40 @@ private static InlineDiffLine<CodeLine>[] CreateDiffOnlyLines(InlineDiffLine<Cod
592594
}
593595
return filteredLines.ToArray();
594596
}
597+
/// <summary>
598+
/// Create and Assign Approval Check Boxes
599+
/// </summary>
600+
/// <param name="Model"></param>
601+
/// <returns></returns>
602+
603+
public static (string modalId, List<string> issueList, Dictionary<string, (string modalBody, string checkboxId, string checkboxName)> issueDict) GetModalInfo(ReviewPageModel Model)
604+
{
605+
var issueDict = new Dictionary<string, (string modalBody, string checkboxId, string checkboxName)>
606+
{
607+
["openConvos"] = ("Active Conversations Present:", "overrideConvo", "overrideConvo"),
608+
["fatalDiagnostics"] = ("Fatal Diagnostics Present:", "overrideDiag", "overrideDiag")
609+
};
610+
611+
var issueList = new List<string>();
612+
string modalId = "";
613+
614+
if ((Model.ReviewContent.ActiveConversationsInActiveAPIRevision > 0 || Model.ReviewContent.ActiveConversationsInSampleRevisions > 0) && Model.ReviewContent.HasFatalDiagnostics)
615+
{
616+
modalId = "convoFatalModel";
617+
issueList = new List<string> { "openConvos", "fatalDiagnostics" };
618+
}
619+
else if ((Model.ReviewContent.ActiveConversationsInActiveAPIRevision > 0 || Model.ReviewContent.ActiveConversationsInSampleRevisions > 0) && !Model.ReviewContent.HasFatalDiagnostics)
620+
{
621+
modalId = "openConversationModel";
622+
issueList = new List<string> { "openConvos" };
623+
}
624+
else
625+
{
626+
modalId = "fatalErrorModel";
627+
issueList = new List<string> { "fatalDiagnostics" };
628+
}
629+
630+
return (modalId, issueList, issueDict);
631+
}
595632
}
596633
}

src/dotnet/APIView/APIViewWeb/LeanModels/ReviewRevisionPageModels.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class ReviewContentModel
3131
public string NotificationMessage { get; set; }
3232
public ReviewContentModelDirective Directive { get; set; }
3333
public Dictionary<string, ReviewContentModel> CrossLanguageViewContent { get; set; } = new Dictionary<string, ReviewContentModel>();
34+
public bool HasFatalDiagnostics { get; set; }
3435
}
3536

3637
public class ReviewBadgeModel

0 commit comments

Comments
 (0)