Don't hand down the ChangeComment object, instead subscribe to the model
Change-Id: Ie06b9d83249b3472fc1163b4e21b1a38c07980a8
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 e4b466b..c4ccb7d 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
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import {LitElement, css, html} from 'lit';
-import {customElement, property} from 'lit/decorators';
+import {customElement, property, state} from 'lit/decorators';
import {subscribe} from '../../lit/subscription-controller';
import {sharedStyles} from '../../../styles/shared-styles';
import {appContext} from '../../../services/app-context';
@@ -65,6 +65,11 @@
import {modifierPressed} from '../../../utils/dom-util';
import {DropdownLink} from '../../shared/gr-dropdown/gr-dropdown';
import {fontStyles} from '../../../styles/gr-font-styles';
+import {account$} from '../../../services/user/user-model';
+import {
+ changeComments$,
+ threads$,
+} from '../../../services/comments/comments-model';
export enum SummaryChipStyles {
INFO = 'info',
@@ -378,31 +383,31 @@
@customElement('gr-change-summary')
export class GrChangeSummary extends LitElement {
- @property({type: Object})
+ @state()
changeComments?: ChangeComments;
- @property({type: Array})
+ @state()
commentThreads?: CommentThread[];
- @property({type: Object})
+ @state()
selfAccount?: AccountInfo;
- @property()
+ @state()
runs: CheckRun[] = [];
- @property()
+ @state()
showChecksSummary = false;
- @property()
+ @state()
someProvidersAreLoading = false;
- @property()
+ @state()
errorMessages: ErrorMessages = {};
- @property()
+ @state()
loginCallback?: () => void;
- @property()
+ @state()
actions: Action[] = [];
private showAllChips = new Map<RunStatus | Category, boolean>();
@@ -421,6 +426,9 @@
subscribe(this, errorMessagesLatest$, x => (this.errorMessages = x));
subscribe(this, loginCallbackLatest$, x => (this.loginCallback = x));
subscribe(this, topLevelActionsLatest$, x => (this.actions = x));
+ subscribe(this, changeComments$, x => (this.changeComments = x));
+ subscribe(this, threads$, x => (this.commentThreads = x));
+ subscribe(this, account$, x => (this.selfAccount = x));
}
static override get styles() {
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 cb37458..633fb5c 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
@@ -439,12 +439,7 @@
</gr-editable-content>
</div>
<h3 class="assistive-tech-only">Comments and Checks Summary</h3>
- <gr-change-summary
- change-comments="[[_changeComments]]"
- comment-threads="[[_commentThreads]]"
- self-account="[[_account]]"
- >
- </gr-change-summary>
+ <gr-change-summary></gr-change-summary>
<gr-endpoint-decorator name="commit-container">
<gr-endpoint-param name="change" value="[[_change]]">
</gr-endpoint-param>
@@ -528,7 +523,6 @@
change="[[_change]]"
change-num="[[_changeNum]]"
revision-info="[[_revisionInfo]]"
- change-comments="[[_changeComments]]"
commit-info="[[_commitInfo]]"
change-url="[[_computeChangeUrl(_change)]]"
edit-mode="[[_editMode]]"
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
index 1b44e35..920844b 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header.ts
@@ -39,7 +39,6 @@
BasePatchSetNum,
} from '../../../types/common';
import {DiffPreferencesInfo} from '../../../types/diff';
-import {ChangeComments} from '../../diff/gr-comment-api/gr-comment-api';
import {GrDiffModeSelector} from '../../diff/gr-diff-mode-selector/gr-diff-mode-selector';
import {GrButton} from '../../shared/gr-button/gr-button';
import {fireEvent} from '../../../utils/event-util';
@@ -101,9 +100,6 @@
changeUrl?: string;
@property({type: Object})
- changeComments?: ChangeComments;
-
- @property({type: Object})
commitInfo?: CommitInfo;
@property({type: Boolean})
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_html.ts b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_html.ts
index 5a85531..fbba2fc 100644
--- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_html.ts
+++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_html.ts
@@ -132,7 +132,6 @@
<div class="patchInfoContent">
<gr-patch-range-select
id="rangeSelect"
- change-comments="[[changeComments]]"
change-num="[[changeNum]]"
patch-num="[[patchNum]]"
base-patch-num="[[basePatchNum]]"
diff --git a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
index c819c40..5d4405f 100644
--- a/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
+++ b/polygerrit-ui/app/elements/diff/gr-patch-range-select/gr-patch-range-select.ts
@@ -50,6 +50,8 @@
import {sharedStyles} from '../../../styles/shared-styles';
import {LitElement, PropertyValues, css, html} from 'lit';
import {customElement, property, query, state} from 'lit/decorators';
+import {subscribe} from '../../lit/subscription-controller';
+import {changeComments$} from '../../../services/comments/comments-model';
// Maximum length for patch set descriptions.
const PATCH_DESC_MAX_LENGTH = 500;
@@ -99,9 +101,6 @@
changeNum?: string;
@property({type: Object})
- changeComments?: ChangeComments;
-
- @property({type: Object})
filesWeblinks?: FilesWebLinks;
@property({type: String})
@@ -117,12 +116,21 @@
@property({type: Object})
revisionInfo?: RevisionInfoClass;
- /** Internal state, derived from `revisions` in willUpdate(). */
+ /** Private internal state, derived from `revisions` in willUpdate(). */
@state()
private sortedRevisions: (RevisionInfo | EditRevisionInfo)[] = [];
+ /** Private internal state, visible for testing. */
+ @state()
+ changeComments?: ChangeComments;
+
private readonly reporting: ReportingService = appContext.reportingService;
+ constructor() {
+ super();
+ subscribe(this, changeComments$, x => (this.changeComments = x));
+ }
+
static override get styles() {
return [
a11yStyles,
diff --git a/polygerrit-ui/app/services/comments/comments-model.ts b/polygerrit-ui/app/services/comments/comments-model.ts
index ef57416..5b32465 100644
--- a/polygerrit-ui/app/services/comments/comments-model.ts
+++ b/polygerrit-ui/app/services/comments/comments-model.ts
@@ -100,8 +100,11 @@
commentState.portedComments,
commentState.portedDrafts
)
- ),
- distinctUntilChanged()
+ )
+);
+
+export const threads$ = changeComments$.pipe(
+ map(changeComments => changeComments.getAllThreadsForChange())
);
function publishState(state: CommentState) {