UI: Show a 'loading' chip when tasks are being loaded

Currently, 'No Tasks' is shown in the tasks summary section when the
API to fetch the tasks is in progress. Show a 'loading' chip instead.

https://imgur.com/a/hSTtmRx

Change-Id: Ie89cc9276ac4c5e3f47aec3b0831636feb781cdc
diff --git a/gr-task-plugin/gr-task-chip_html.js b/gr-task-plugin/gr-task-chip_html.js
index 68e1d0c..a8e55d0 100644
--- a/gr-task-plugin/gr-task-chip_html.js
+++ b/gr-task-plugin/gr-task-chip_html.js
@@ -35,6 +35,17 @@
       position: relative;
       top: 2px;
     }
+    .taskSummaryChip.loading {
+      border-color: var(--gray-foreground);
+      background: var(--gray-background);
+    }
+    .taskSummaryChip.loading:hover {
+      background: var(--gray-background-hover);
+      box-shadow: var(--elevation-level-1);
+    }
+    .taskSummaryChip.loading:focus-within {
+      background: var(--gray-background-focus);
+    }
     .taskSummaryChip.success {
       border-color: var(--success-foreground);
       background: var(--success-background);
diff --git a/gr-task-plugin/gr-task-summary.js b/gr-task-plugin/gr-task-summary.js
index 1e23ebe..4fa8ea8 100644
--- a/gr-task-plugin/gr-task-summary.js
+++ b/gr-task-plugin/gr-task-summary.js
@@ -64,6 +64,11 @@
         notify: true,
         value: 0,
       },
+
+      is_loading: {
+        type: Boolean,
+        value: true,
+      },
     };
   }
 
@@ -77,13 +82,19 @@
       this.waiting_count = e.detail.waiting_count;
       this.duplicate_count = e.detail.duplicate_count;
       this.pass_count = e.detail.pass_count;
+      this.is_loading = false;
     });
   }
 
-  _can_show_chips(ready_count, fail_count, invalid_count,
-      waiting_count, duplicate_count, pass_count) {
-    return ready_count || fail_count || invalid_count ||
-      waiting_count || duplicate_count || pass_count;
+  _show_no_tasks(is_loading, ready_count,
+      fail_count, invalid_count,
+      waiting_count, duplicate_count,
+      pass_count) {
+    if (is_loading || ready_count || fail_count || invalid_count ||
+      waiting_count || duplicate_count || pass_count) {
+      return false;
+    }
+    return true;
   }
 }
 
diff --git a/gr-task-plugin/gr-task-summary_html.js b/gr-task-plugin/gr-task-summary_html.js
index 2e567c3..6fdb42f 100644
--- a/gr-task-plugin/gr-task-summary_html.js
+++ b/gr-task-plugin/gr-task-summary_html.js
@@ -71,16 +71,15 @@
       <tr>
         <td class="key">Tasks</td>
         <td class="value">
-          <template is="dom-if" if="[[_can_show_chips(ready_count, fail_count, invalid_count, waiting_count, duplicate_count, pass_count)]]">
-            <gr-task-chip chip_style="fail" hidden$="[[!fail_count]]">[[fail_count]] blocked</gr-task-chip>
-            <gr-task-chip chip_style="invalid" hidden$="[[!invalid_count]]">[[invalid_count]] invalid</gr-task-chip>
-            <gr-task-chip chip_style="duplicate" hidden$="[[!duplicate_count]]">[[duplicate_count]] duplicate</gr-task-chip>
-            <gr-task-chip chip_style="ready" hidden$="[[!ready_count]]">[[ready_count]] ready</gr-task-chip>
-            <gr-task-chip chip_style="waiting" hidden$="[[!waiting_count]]">[[waiting_count]] waiting</gr-task-chip>
-            <gr-task-chip chip_style="success" hidden$="[[!pass_count]]">[[pass_count]] passed</gr-task-chip>
-          </template>
-          <template is="dom-if" if="[[!_can_show_chips(ready_count, fail_count, invalid_count, waiting_count, duplicate_count, pass_count)]]">
-              <td>No tasks</td>
+          <gr-task-chip chip_style="loading" hidden$="[[!is_loading]]">loading...</gr-task-chip>
+          <gr-task-chip chip_style="fail" hidden$="[[!fail_count]]">[[fail_count]] blocked</gr-task-chip>
+          <gr-task-chip chip_style="invalid" hidden$="[[!invalid_count]]">[[invalid_count]] invalid</gr-task-chip>
+          <gr-task-chip chip_style="duplicate" hidden$="[[!duplicate_count]]">[[duplicate_count]] duplicate</gr-task-chip>
+          <gr-task-chip chip_style="ready" hidden$="[[!ready_count]]">[[ready_count]] ready</gr-task-chip>
+          <gr-task-chip chip_style="waiting" hidden$="[[!waiting_count]]">[[waiting_count]] waiting</gr-task-chip>
+          <gr-task-chip chip_style="success" hidden$="[[!pass_count]]">[[pass_count]] passed</gr-task-chip>
+          <template is="dom-if" if="[[_show_no_tasks(is_loading, ready_count, fail_count, invalid_count, waiting_count, duplicate_count, pass_count)]]">
+            <td>No tasks</td>
           </template>
         </td>
       </tr>