Click on comment chip will select same category in comments tab

Change-Id: Icf1ecd4cbc068519409bc6291f7bff988517c781
diff --git a/polygerrit-ui/app/elements/change/gr-change-summary/gr-change-summary.ts b/polygerrit-ui/app/elements/change/gr-change-summary/gr-change-summary.ts
index 021d7c4..72ed6e6 100644
--- a/polygerrit-ui/app/elements/change/gr-change-summary/gr-change-summary.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-summary/gr-change-summary.ts
@@ -55,6 +55,7 @@
 import {notUndefined} from '../../../types/types';
 import {uniqueDefinedAvatar} from '../../../utils/account-util';
 import {PrimaryTab} from '../../../constants/constants';
+import {CommentTabState} from '../../../types/events';
 
 export enum SummaryChipStyles {
   INFO = 'info',
@@ -71,6 +72,9 @@
   @property()
   styleType = SummaryChipStyles.UNDEFINED;
 
+  @property()
+  category?: CommentTabState;
+
   static get styles() {
     return [
       sharedStyles,
@@ -132,7 +136,9 @@
   private handleClick(e: MouseEvent) {
     e.stopPropagation();
     e.preventDefault();
-    fireShowPrimaryTab(this, PrimaryTab.COMMENT_THREADS);
+    fireShowPrimaryTab(this, PrimaryTab.COMMENT_THREADS, true, {
+      commentTab: this.category,
+    });
   }
 }
 
@@ -413,12 +419,14 @@
                 No Comments</gr-summary-chip
               ><gr-summary-chip
                 styleType=${SummaryChipStyles.WARNING}
+                category=${CommentTabState.DRAFTS}
                 icon="edit"
                 ?hidden=${!draftCount}
               >
                 ${pluralize(draftCount, 'draft')}</gr-summary-chip
               ><gr-summary-chip
                 styleType=${SummaryChipStyles.WARNING}
+                category=${CommentTabState.UNRESOLVED}
                 icon="message"
                 ?hidden=${!countUnresolvedComments}
               >
@@ -433,6 +441,7 @@
                 ${countUnresolvedComments} unresolved</gr-summary-chip
               ><gr-summary-chip
                 styleType=${SummaryChipStyles.CHECK}
+                category=${CommentTabState.SHOW_ALL}
                 icon="markChatRead"
                 ?hidden=${!countResolvedComments}
                 >${countResolvedComments} resolved</gr-summary-chip
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
index 61006f9..7b80977 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts
@@ -152,11 +152,13 @@
   ShowAlertEventDetail,
   SwitchTabEvent,
   ThreadListModifiedEvent,
+  TabState,
 } from '../../../types/events';
 import {GrButton} from '../../shared/gr-button/gr-button';
 import {GrMessagesList} from '../gr-messages-list/gr-messages-list';
 import {GrThreadList} from '../gr-thread-list/gr-thread-list';
 import {
+  EventType,
   fireAlert,
   fireEvent,
   firePageError,
@@ -555,6 +557,9 @@
   @property({type: Boolean})
   _isNewChangeSummaryUiEnabled = false;
 
+  @property({type: String})
+  _tabState?: TabState;
+
   restApiService = appContext.restApiService;
 
   checksService = appContext.checksService;
@@ -694,7 +699,7 @@
     this.listen(window, 'scroll', '_handleScroll');
     this.listen(document, 'visibilitychange', '_handleVisibilityChange');
 
-    this.addEventListener('show-primary-tab', e =>
+    this.addEventListener(EventType.SHOW_PRIMARY_TAB, e =>
       this._setActivePrimaryTab(e)
     );
     this.addEventListener('show-secondary-tab', e =>
@@ -853,6 +858,7 @@
         this._selectedTabPluginHeader = '';
       }
     }
+    this._tabState = e.detail.tabState;
   }
 
   /**
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_html.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_html.ts
index 81aff90..7811ffb 100644
--- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_html.ts
@@ -679,6 +679,7 @@
           change="[[_change]]"
           change-num="[[_changeNum]]"
           logged-in="[[_loggedIn]]"
+          comment-tab-state="[[_tabState.commentTab]]"
           only-show-robot-comments-with-human-reply=""
           unresolved-only
         ></gr-thread-list>
diff --git a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
index 22b2e43..79be65c 100644
--- a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
+++ b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list.ts
@@ -43,6 +43,8 @@
 import {fireThreadListModifiedEvent} from '../../../utils/event-util';
 import {KnownExperimentId} from '../../../services/flags/flags';
 import {appContext} from '../../../services/app-context';
+import {assertNever} from '../../../utils/common-util';
+import {CommentTabState} from '../../../types/events';
 
 interface CommentThreadWithInfo {
   thread: CommentThread;
@@ -103,6 +105,9 @@
   @property({type: Boolean})
   _isNewChangeSummaryUiEnabled = false;
 
+  @property({type: Object, observer: '_commentTabStateChange'})
+  commentTabState?: CommentTabState;
+
   flagsService = appContext.flagsService;
 
   /** @override */
@@ -498,6 +503,26 @@
   filterRobotThreadsWithoutHumanReply(threads?: CommentThread[]) {
     return threads?.filter(t => !isRobotThread(t) || hasHumanReply(t));
   }
+
+  _commentTabStateChange(
+    newValue?: CommentTabState,
+    oldValue?: CommentTabState
+  ) {
+    if (!newValue || newValue === oldValue) return;
+    switch (newValue) {
+      case CommentTabState.UNRESOLVED:
+        this._handleOnlyUnresolved();
+        break;
+      case CommentTabState.DRAFTS:
+        this._handleOnlyDrafts();
+        break;
+      case CommentTabState.SHOW_ALL:
+        this._handleAllComments();
+        break;
+      default:
+        assertNever(newValue, 'Unsupported preferred state');
+    }
+  }
 }
 
 declare global {
diff --git a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_html.ts b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_html.ts
index 8a52555..a0a82ab 100644
--- a/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-thread-list/gr-thread-list_html.ts
@@ -102,7 +102,7 @@
             name="filterComments"
             type="radio"
             on-click="_handleOnlyUnresolved"
-            checked$="[[unresolvedOnly]]"
+            checked="[[unresolvedOnly]]"
           />
           <label for="unresolvedRadio">
             Unresolved ([[_countUnresolved(threads)]])
@@ -113,7 +113,7 @@
             name="filterComments"
             type="radio"
             on-click="_handleOnlyDrafts"
-            checked$="[[_draftsOnly]]"
+            checked="[[_draftsOnly]]"
           />
           <label for="draftsRadio">
             Drafts ([[_countDrafts(threads)]])
@@ -124,7 +124,7 @@
             name="filterComments"
             type="radio"
             on-click="_handleAllComments"
-            checked$="[[_showAllComments(_draftsOnly, unresolvedOnly)]]"
+            checked="[[_showAllComments(_draftsOnly, unresolvedOnly)]]"
           />
           <label for="all">
             All ([[_countAllThreads(threads)]])
diff --git a/polygerrit-ui/app/types/events.ts b/polygerrit-ui/app/types/events.ts
index 163c760..6b05fad 100644
--- a/polygerrit-ui/app/types/events.ts
+++ b/polygerrit-ui/app/types/events.ts
@@ -146,6 +146,18 @@
   value?: number;
   // scroll into the tab afterwards, from custom event
   scrollIntoView?: boolean;
+  // define state of tab after opening
+  tabState?: TabState;
+}
+
+export interface TabState {
+  commentTab?: CommentTabState;
+}
+
+export enum CommentTabState {
+  UNRESOLVED = 'unresolved',
+  DRAFTS = 'drafts',
+  SHOW_ALL = 'show all',
 }
 
 export type SwitchTabEvent = CustomEvent<SwitchTabEventDetail>;
diff --git a/polygerrit-ui/app/utils/event-util.ts b/polygerrit-ui/app/utils/event-util.ts
index ee3c833..cf590e0 100644
--- a/polygerrit-ui/app/utils/event-util.ts
+++ b/polygerrit-ui/app/utils/event-util.ts
@@ -17,7 +17,7 @@
 
 import {UrlEncodedCommentId} from '../types/common';
 import {FetchRequest} from '../types/types';
-import {DialogChangeEventDetail} from '../types/events';
+import {DialogChangeEventDetail, TabState} from '../types/events';
 
 export enum EventType {
   SHOW_ALERT = 'show-alert',
@@ -27,6 +27,7 @@
   TITLE_CHANGE = 'title-change',
   THREAD_LIST_MODIFIED = 'thread-list-modified',
   DIALOG_CHANGE = 'dialog-change',
+  SHOW_PRIMARY_TAB = 'show-primary-tab',
 }
 
 export function fireEvent(target: EventTarget, type: string) {
@@ -117,10 +118,15 @@
   );
 }
 
-export function fireShowPrimaryTab(target: EventTarget, tab: string) {
+export function fireShowPrimaryTab(
+  target: EventTarget,
+  tab: string,
+  scrollIntoView?: boolean,
+  tabState?: TabState
+) {
   target.dispatchEvent(
-    new CustomEvent('show-primary-tab', {
-      detail: {tab},
+    new CustomEvent(EventType.SHOW_PRIMARY_TAB, {
+      detail: {tab, scrollIntoView, tabState},
       composed: true,
       bubbles: true,
     })