Dave Borowitz | 8cdc76b | 2018-03-26 10:04:27 -0400 | [diff] [blame] | 1 | /** |
| 2 | * @license |
Ben Rohlfs | 94fcbbc | 2022-05-27 10:45:03 +0200 | [diff] [blame] | 3 | * Copyright 2015 Google LLC |
| 4 | * SPDX-License-Identifier: Apache-2.0 |
Dave Borowitz | 8cdc76b | 2018-03-26 10:04:27 -0400 | [diff] [blame] | 5 | */ |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 6 | import '../gr-change-list/gr-change-list'; |
| 7 | import '../gr-repo-header/gr-repo-header'; |
| 8 | import '../gr-user-header/gr-user-header'; |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 9 | import { |
| 10 | AccountDetailInfo, |
| 11 | AccountId, |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 12 | ChangeInfo, |
| 13 | EmailAddress, |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 14 | PreferencesInput, |
Paladox none | 5554d95 | 2021-08-11 03:56:51 +0000 | [diff] [blame] | 15 | RepoName, |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 16 | } from '../../../types/common'; |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 17 | import {ChangeStarToggleStarDetail} from '../../shared/gr-change-star/gr-change-star'; |
Ben Rohlfs | 44f0104 | 2023-02-18 13:27:57 +0100 | [diff] [blame] | 18 | import {fireAlert, fire, fireTitleChange} from '../../../utils/event-util'; |
Chris Poucet | c6e880b | 2021-11-15 19:57:06 +0100 | [diff] [blame] | 19 | import {getAppContext} from '../../../services/app-context'; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 20 | import {sharedStyles} from '../../../styles/shared-styles'; |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 21 | import {LitElement, PropertyValues, html, css, nothing} from 'lit'; |
| 22 | import {customElement, state, query} from 'lit/decorators.js'; |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 23 | import { |
| 24 | createSearchUrl, |
| 25 | searchViewModelToken, |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 26 | } from '../../../models/views/search'; |
| 27 | import {resolve} from '../../../models/dependency'; |
| 28 | import {subscribe} from '../../lit/subscription-controller'; |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 29 | import {userModelToken} from '../../../models/user/user-model'; |
Ben Rohlfs | 118aa9f | 2023-01-24 18:10:35 +0100 | [diff] [blame] | 30 | import {navigationToken} from '../../core/gr-navigation/gr-navigation'; |
Logan Hanks | 29693ac | 2017-07-12 10:11:21 -0700 | [diff] [blame] | 31 | |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 32 | const LIMIT_OPERATOR_PATTERN = /\blimit:(\d+)/i; |
| 33 | |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 34 | @customElement('gr-change-list-view') |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 35 | export class GrChangeListView extends LitElement { |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 36 | @query('#prevArrow') protected prevArrow?: HTMLAnchorElement; |
Andrew Bonventre | 78792e8 | 2016-03-04 17:48:22 -0500 | [diff] [blame] | 37 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 38 | @query('#nextArrow') protected nextArrow?: HTMLAnchorElement; |
| 39 | |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 40 | // private but used in test |
| 41 | @state() account?: AccountDetailInfo; |
| 42 | |
| 43 | // private but used in test |
| 44 | @state() loggedIn = false; |
| 45 | |
| 46 | // private but used in test |
| 47 | @state() preferences?: PreferencesInput; |
Andrew Bonventre | 78792e8 | 2016-03-04 17:48:22 -0500 | [diff] [blame] | 48 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 49 | // private but used in test |
| 50 | @state() changesPerPage?: number; |
Kasper Nilsson | 8e6a64d | 2018-04-04 15:33:19 -0700 | [diff] [blame] | 51 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 52 | // private but used in test |
| 53 | @state() query = ''; |
Urs Wolfer | 54a5a46 | 2016-03-09 21:04:22 +0100 | [diff] [blame] | 54 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 55 | // private but used in test |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 56 | @state() offset = 0; |
Andrew Bonventre | 78792e8 | 2016-03-04 17:48:22 -0500 | [diff] [blame] | 57 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 58 | // private but used in test |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 59 | @state() changes: ChangeInfo[] = []; |
Andrew Bonventre | 78792e8 | 2016-03-04 17:48:22 -0500 | [diff] [blame] | 60 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 61 | // private but used in test |
| 62 | @state() loading = true; |
Andrew Bonventre | 78792e8 | 2016-03-04 17:48:22 -0500 | [diff] [blame] | 63 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 64 | // private but used in test |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 65 | @state() userId?: AccountId | EmailAddress; |
Wyatt Allen | 5c3a3cd | 2017-08-30 13:43:37 -0700 | [diff] [blame] | 66 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 67 | // private but used in test |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 68 | @state() repo?: RepoName; |
Dhruv | 7c72da5 | 2022-06-09 11:43:15 +0200 | [diff] [blame] | 69 | |
Chris Poucet | c6e880b | 2021-11-15 19:57:06 +0100 | [diff] [blame] | 70 | private readonly restApiService = getAppContext().restApiService; |
Ben Rohlfs | 43935a4 | 2020-12-01 19:14:09 +0100 | [diff] [blame] | 71 | |
Chris Poucet | c6e880b | 2021-11-15 19:57:06 +0100 | [diff] [blame] | 72 | private reporting = getAppContext().reportingService; |
Dhruv Srivastava | 5841dd8 | 2021-05-17 11:03:19 +0200 | [diff] [blame] | 73 | |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 74 | private readonly getUserModel = resolve(this, userModelToken); |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 75 | |
| 76 | private readonly getViewModel = resolve(this, searchViewModelToken); |
| 77 | |
Ben Rohlfs | 118aa9f | 2023-01-24 18:10:35 +0100 | [diff] [blame] | 78 | private readonly getNavigation = resolve(this, navigationToken); |
| 79 | |
Ben Rohlfs | f7f1e8e | 2021-03-12 14:36:40 +0100 | [diff] [blame] | 80 | constructor() { |
| 81 | super(); |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 82 | this.addEventListener('next-page', () => this.handleNextPage()); |
| 83 | this.addEventListener('previous-page', () => this.handlePreviousPage()); |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 84 | |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 85 | subscribe( |
| 86 | this, |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 87 | () => this.getViewModel().query$, |
| 88 | x => (this.query = x) |
| 89 | ); |
| 90 | subscribe( |
| 91 | this, |
| 92 | () => this.getViewModel().offsetNumber$, |
| 93 | x => (this.offset = x) |
| 94 | ); |
| 95 | subscribe( |
| 96 | this, |
| 97 | () => this.getViewModel().loading$, |
| 98 | x => (this.loading = x) |
| 99 | ); |
| 100 | subscribe( |
| 101 | this, |
| 102 | () => this.getViewModel().changes$, |
| 103 | x => (this.changes = x) |
| 104 | ); |
| 105 | subscribe( |
| 106 | this, |
| 107 | () => this.getViewModel().userId$, |
| 108 | x => (this.userId = x) |
| 109 | ); |
| 110 | subscribe( |
| 111 | this, |
| 112 | () => this.getViewModel().repo$, |
| 113 | x => (this.repo = x) |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 114 | ); |
| 115 | subscribe( |
| 116 | this, |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 117 | () => this.getUserModel().account$, |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 118 | x => (this.account = x) |
| 119 | ); |
| 120 | subscribe( |
| 121 | this, |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 122 | () => this.getUserModel().loggedIn$, |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 123 | x => (this.loggedIn = x) |
| 124 | ); |
| 125 | subscribe( |
| 126 | this, |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 127 | () => this.getUserModel().preferenceChangesPerPage$, |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 128 | x => (this.changesPerPage = x) |
Ben Rohlfs | c8a096d | 2022-09-23 10:41:45 +0200 | [diff] [blame] | 129 | ); |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 130 | subscribe( |
| 131 | this, |
Chris Poucet | bb0cf83 | 2022-10-24 12:32:10 +0200 | [diff] [blame] | 132 | () => this.getUserModel().preferences$, |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 133 | x => (this.preferences = x) |
| 134 | ); |
Ben Rohlfs | 27e9569 | 2022-09-28 12:57:47 +0000 | [diff] [blame] | 135 | } |
| 136 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 137 | static override get styles() { |
| 138 | return [ |
| 139 | sharedStyles, |
| 140 | css` |
| 141 | :host { |
| 142 | display: block; |
| 143 | } |
| 144 | .loading { |
| 145 | color: var(--deemphasized-text-color); |
| 146 | padding: var(--spacing-l); |
| 147 | } |
| 148 | gr-change-list { |
| 149 | width: 100%; |
| 150 | } |
| 151 | gr-user-header, |
| 152 | gr-repo-header { |
| 153 | border-bottom: 1px solid var(--border-color); |
| 154 | } |
| 155 | nav { |
| 156 | align-items: center; |
| 157 | display: flex; |
| 158 | height: 3rem; |
| 159 | justify-content: flex-end; |
| 160 | margin-right: 20px; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 161 | color: var(--deemphasized-text-color); |
| 162 | } |
Chris Poucet | b7e9bb1 | 2022-07-22 14:11:03 +0200 | [diff] [blame] | 163 | gr-icon { |
Chris Poucet | cf51254 | 2022-07-12 09:03:42 +0200 | [diff] [blame] | 164 | font-size: 1.85rem; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 165 | margin-left: 16px; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 166 | } |
| 167 | .hide { |
| 168 | display: none; |
| 169 | } |
| 170 | @media only screen and (max-width: 50em) { |
| 171 | .loading, |
| 172 | .error { |
| 173 | padding: 0 var(--spacing-l); |
| 174 | } |
| 175 | } |
| 176 | `, |
| 177 | ]; |
| 178 | } |
| 179 | |
| 180 | override render() { |
Dhruv Srivastava | 45166a1 | 2022-03-02 15:30:35 +0100 | [diff] [blame] | 181 | // In case of an internal reload we want the ChangeList section components |
| 182 | // to remain in the DOM so that the Bulk Actions Model associated with them |
| 183 | // is not recreated after the reload resulting in user selections being lost |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 184 | return html` |
Dhruv Srivastava | 45166a1 | 2022-03-02 15:30:35 +0100 | [diff] [blame] | 185 | <div class="loading" ?hidden=${!this.loading}>Loading...</div> |
| 186 | <div ?hidden=${this.loading}> |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 187 | ${this.renderRepoHeader()} ${this.renderUserHeader()} |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 188 | <gr-change-list |
| 189 | .account=${this.account} |
| 190 | .changes=${this.changes} |
| 191 | .preferences=${this.preferences} |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 192 | @toggle-star=${(e: CustomEvent<ChangeStarToggleStarDetail>) => { |
| 193 | this.handleToggleStar(e); |
| 194 | }} |
Chris Poucet | 12100f1 | 2022-07-06 15:11:27 +0200 | [diff] [blame] | 195 | .usp=${'search'} |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 196 | ></gr-change-list> |
| 197 | ${this.renderChangeListViewNav()} |
| 198 | </div> |
| 199 | `; |
| 200 | } |
| 201 | |
| 202 | private renderRepoHeader() { |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 203 | if (!this.repo) return nothing; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 204 | |
| 205 | return html` <gr-repo-header .repo=${this.repo}></gr-repo-header> `; |
| 206 | } |
| 207 | |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 208 | private renderUserHeader() { |
| 209 | if (!this.userId) return nothing; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 210 | |
| 211 | return html` |
| 212 | <gr-user-header |
| 213 | .userId=${this.userId} |
| 214 | showDashboardLink |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 215 | .loggedIn=${this.loggedIn} |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 216 | ></gr-user-header> |
| 217 | `; |
| 218 | } |
| 219 | |
| 220 | private renderChangeListViewNav() { |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 221 | if (this.loading || !this.changes || !this.changes.length) return nothing; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 222 | |
| 223 | return html` |
| 224 | <nav> |
| 225 | Page ${this.computePage()} ${this.renderPrevArrow()} |
| 226 | ${this.renderNextArrow()} |
| 227 | </nav> |
| 228 | `; |
| 229 | } |
| 230 | |
| 231 | private renderPrevArrow() { |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 232 | if (this.offset === 0) return nothing; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 233 | |
| 234 | return html` |
Ben Rohlfs | 8003bd3 | 2022-04-05 18:24:42 +0200 | [diff] [blame] | 235 | <a id="prevArrow" href=${this.computeNavLink(-1)}> |
Chris Poucet | b7e9bb1 | 2022-07-22 14:11:03 +0200 | [diff] [blame] | 236 | <gr-icon icon="chevron_left" aria-label="Older"></gr-icon> |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 237 | </a> |
| 238 | `; |
| 239 | } |
| 240 | |
| 241 | private renderNextArrow() { |
Ben Rohlfs | 42d29da | 2022-09-19 12:42:40 +0200 | [diff] [blame] | 242 | const changesCount = this.changes?.length ?? 0; |
| 243 | if (changesCount === 0) return nothing; |
| 244 | if (!this.changes?.[changesCount - 1]._more_changes) return nothing; |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 245 | |
| 246 | return html` |
Ben Rohlfs | 8003bd3 | 2022-04-05 18:24:42 +0200 | [diff] [blame] | 247 | <a id="nextArrow" href=${this.computeNavLink(1)}> |
Chris Poucet | b7e9bb1 | 2022-07-22 14:11:03 +0200 | [diff] [blame] | 248 | <gr-icon icon="chevron_right" aria-label="Newer"></gr-icon> |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 249 | </a> |
| 250 | `; |
| 251 | } |
| 252 | |
Ben Rohlfs | 7aeecaa | 2022-10-11 15:26:45 +0000 | [diff] [blame] | 253 | override updated(changedProperties: PropertyValues) { |
| 254 | if (changedProperties.has('query')) { |
Ben Rohlfs | ef65cba | 2023-02-28 21:13:33 +0100 | [diff] [blame] | 255 | fireTitleChange(this.query); |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 256 | } |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 257 | } |
| 258 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 259 | // private but used in test |
| 260 | limitFor(query: string, defaultLimit?: number) { |
| 261 | if (defaultLimit === undefined) return 0; |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 262 | const match = query.match(LIMIT_OPERATOR_PATTERN); |
| 263 | if (!match) { |
| 264 | return defaultLimit; |
Dmitrii Filippov | 3fd2b10 | 2019-11-15 16:16:46 +0100 | [diff] [blame] | 265 | } |
Dhruv Srivastava | b8edee9 | 2020-10-19 10:20:07 +0200 | [diff] [blame] | 266 | return Number(match[1]); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 267 | } |
Kasper Nilsson | 9724092 | 2018-02-08 14:57:27 -0800 | [diff] [blame] | 268 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 269 | // private but used in test |
| 270 | computeNavLink(direction: number) { |
| 271 | const offset = this.offset ?? 0; |
| 272 | const limit = this.limitFor(this.query, this.changesPerPage); |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 273 | const newOffset = Math.max(0, offset + limit * direction); |
Ben Rohlfs | 39aa057 | 2022-09-14 22:57:17 +0200 | [diff] [blame] | 274 | return createSearchUrl({query: this.query, offset: newOffset}); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 275 | } |
| 276 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 277 | // private but used in test |
| 278 | handleNextPage() { |
| 279 | if (!this.nextArrow || !this.changesPerPage) return; |
Ben Rohlfs | 118aa9f | 2023-01-24 18:10:35 +0100 | [diff] [blame] | 280 | this.getNavigation().setUrl(this.computeNavLink(1)); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 281 | } |
| 282 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 283 | // private but used in test |
| 284 | handlePreviousPage() { |
| 285 | if (!this.prevArrow || !this.changesPerPage) return; |
Ben Rohlfs | 118aa9f | 2023-01-24 18:10:35 +0100 | [diff] [blame] | 286 | this.getNavigation().setUrl(this.computeNavLink(-1)); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 287 | } |
| 288 | |
Paladox none | 142add0 | 2021-12-21 21:06:09 +0000 | [diff] [blame] | 289 | // private but used in test |
| 290 | computePage() { |
| 291 | if (this.offset === undefined || this.changesPerPage === undefined) return; |
Chris Poucet | 9cc6ad9 | 2022-11-25 12:08:26 +0100 | [diff] [blame] | 292 | // We use Math.ceil in case the offset is not divisible by changesPerPage. |
| 293 | // If we did not do this, you'd have page '1.2' and then when pressing left |
| 294 | // arrow 'Page 1'. This way page '1.2' becomes page '2'. |
| 295 | return ( |
| 296 | Math.ceil(this.offset / this.limitFor(this.query, this.changesPerPage)) + |
| 297 | 1 |
| 298 | ); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 299 | } |
| 300 | |
Ben Rohlfs | 5a1bd47 | 2022-09-09 13:27:22 +0200 | [diff] [blame] | 301 | private async handleToggleStar(e: CustomEvent<ChangeStarToggleStarDetail>) { |
Dhruv Srivastava | 5841dd8 | 2021-05-17 11:03:19 +0200 | [diff] [blame] | 302 | if (e.detail.starred) { |
| 303 | this.reporting.reportInteraction('change-starred-from-change-list'); |
| 304 | } |
Ben Rohlfs | 5a1bd47 | 2022-09-09 13:27:22 +0200 | [diff] [blame] | 305 | const msg = e.detail.starred |
| 306 | ? 'Starring change...' |
| 307 | : 'Unstarring change...'; |
| 308 | fireAlert(this, msg); |
| 309 | await this.restApiService.saveChangeStarred( |
Ben Rohlfs | 43935a4 | 2020-12-01 19:14:09 +0100 | [diff] [blame] | 310 | e.detail.change._number, |
| 311 | e.detail.starred |
| 312 | ); |
Ben Rohlfs | 44f0104 | 2023-02-18 13:27:57 +0100 | [diff] [blame] | 313 | fire(this, 'hide-alert', {}); |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 314 | } |
Dmitrii Filippov | daf0ec9 | 2020-03-17 11:27:28 +0100 | [diff] [blame] | 315 | } |
| 316 | |
Dmitrii Filippov | 8814de1 | 2020-10-10 16:31:21 +0200 | [diff] [blame] | 317 | declare global { |
| 318 | interface HTMLElementTagNameMap { |
| 319 | 'gr-change-list-view': GrChangeListView; |
| 320 | } |
| 321 | } |