Change all components to use the service for rest-api-interface Change-Id: I3acf9269ff43f463aca59aa10ca131b037cede9d
diff --git a/polygerrit-ui/README.md b/polygerrit-ui/README.md index 052a750..c6dd897 100644 --- a/polygerrit-ui/README.md +++ b/polygerrit-ui/README.md
@@ -296,7 +296,7 @@ existing helpers to create an object with all required properties: ``` // Before: -sinon.stub(element.$.restAPI, 'getPreferences').returns( +sinon.stub(element.restApiService, 'getPreferences').returns( Promise.resolve({default_diff_view: 'UNIFIED'})); // After:
diff --git a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_html.ts b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_html.ts index 7c9f28b..46968eb 100644 --- a/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-access-section/gr-access-section_html.ts
@@ -153,5 +153,4 @@ </div> <!-- end deletedContainer --> </fieldset> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list.ts b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list.ts index 44ab784..1b377dc 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list.ts
@@ -32,9 +32,9 @@ import {AppElementAdminParams} from '../../gr-app-types'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {GroupId, GroupInfo, GroupName} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrCreateGroupDialog} from '../gr-create-group-dialog/gr-create-group-dialog'; import {fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -46,7 +46,6 @@ $: { createOverlay: GrOverlay; createNewModal: GrCreateGroupDialog; - restAPI: RestApiService & Element; }; } @@ -97,6 +96,8 @@ @property({type: String}) _filter = ''; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -131,11 +132,11 @@ } _getCreateGroupCapability() { - return this.$.restAPI.getAccount().then(account => { + return this.restApiService.getAccount().then(account => { if (!account) { return; } - return this.$.restAPI + return this.restApiService .getAccountCapabilities(['createGroup']) .then(capabilities => { if (capabilities?.createGroup) { @@ -147,7 +148,7 @@ _getGroups(filter: string, groupsPerPage: number, offset?: number) { this._groups = []; - return this.$.restAPI + return this.restApiService .getGroups(filter, groupsPerPage, offset) .then(groups => { if (!groups) { @@ -163,7 +164,7 @@ } _refreshGroupsList() { - this.$.restAPI.invalidateGroupsCache(); + this.restApiService.invalidateGroupsCache(); return this._getGroups(this._filter, this._groupsPerPage, this._offset); }
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_html.ts b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_html.ts index 93de8b4..7574f79 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_html.ts
@@ -78,5 +78,4 @@ </div> </gr-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_test.js b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_test.js index 93d41c3..77a2a41 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-admin-group-list/gr-admin-group-list_test.js
@@ -131,7 +131,7 @@ suite('filter', () => { test('_paramsChanged', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getGroups') .callsFake(() => Promise.resolve(groups)); const value = { @@ -139,7 +139,7 @@ offset: 25, }; element._paramsChanged(value).then(() => { - assert.isTrue(element.$.restAPI.getGroups.lastCall + assert.isTrue(element.restApiService.getGroups.lastCall .calledWithExactly('test', 25, 25)); done(); });
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts index 7fb713f..8fe23e8 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts +++ b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view.ts
@@ -52,7 +52,6 @@ SubsectionInterface, } from '../../../utils/admin-nav-util'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AppElementAdminParams, AppElementGroupParams, @@ -67,12 +66,12 @@ import {GroupNameChangedDetail} from '../gr-group/gr-group'; import {ValueChangeDetail} from '../../shared/gr-dropdown-list/gr-dropdown-list'; import {GrJsApiInterface} from '../../shared/gr-js-api-interface/gr-js-api-interface-element'; +import {appContext} from '../../../services/app-context'; const INTERNAL_GROUP_REGEX = /^[\da-f]{40}$/; export interface GrAdminView { $: { - restAPI: RestApiService & Element; jsAPI: GrJsApiInterface; }; } @@ -183,6 +182,8 @@ @property({type: Boolean}) _showPluginList?: boolean; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -191,7 +192,7 @@ reload() { const promises: [Promise<AccountDetailInfo | undefined>, Promise<void>] = [ - this.$.restAPI.getAccount(), + this.restApiService.getAccount(), getPluginLoader().awaitPluginsLoaded(), ]; return Promise.all(promises).then(result => { @@ -212,7 +213,7 @@ return getAdminLinks( this._account, () => - this.$.restAPI.getAccountCapabilities().then(capabilities => { + this.restApiService.getAccountCapabilities().then(capabilities => { if (!capabilities) { throw new Error('getAccountCapabilities returns undefined'); } @@ -423,7 +424,7 @@ if (!groupId) return; const promises: Array<Promise<void>> = []; - this.$.restAPI.getGroupConfig(groupId).then(group => { + this.restApiService.getGroupConfig(groupId).then(group => { if (!group || !group.name) { return; } @@ -433,13 +434,13 @@ this.reload(); promises.push( - this.$.restAPI.getIsAdmin().then(isAdmin => { + this.restApiService.getIsAdmin().then(isAdmin => { this._isAdmin = !!isAdmin; }) ); promises.push( - this.$.restAPI.getIsGroupOwner(group.name).then(isOwner => { + this.restApiService.getIsGroupOwner(group.name).then(isOwner => { this._groupOwner = isOwner; }) );
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_html.ts b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_html.ts index 5e85a93..4dacd38 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_html.ts
@@ -178,6 +178,5 @@ <gr-repo-dashboards repo="[[params.repo]]"></gr-repo-dashboards> </main> </template> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_test.js b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_test.js index 44fd4d6..15211cf 100644 --- a/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_test.js +++ b/polygerrit-ui/app/elements/admin/gr-admin-view/gr-admin-view_test.js
@@ -83,11 +83,11 @@ }); test('_filteredLinks admin', done => { - sinon.stub(element.$.restAPI, 'getAccount').returns(Promise.resolve({ + sinon.stub(element.restApiService, 'getAccount').returns(Promise.resolve({ name: 'test-user', })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -111,11 +111,11 @@ }); test('_filteredLinks non admin authenticated', done => { - sinon.stub(element.$.restAPI, 'getAccount').returns(Promise.resolve({ + sinon.stub(element.restApiService, 'getAccount').returns(Promise.resolve({ name: 'test-user', })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({}) ); @@ -171,11 +171,11 @@ test('Repo shows up in nav', done => { element._repoName = 'Test Repo'; - sinon.stub(element.$.restAPI, 'getAccount').returns(Promise.resolve({ + sinon.stub(element.restApiService, 'getAccount').returns(Promise.resolve({ name: 'test-user', })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -202,11 +202,11 @@ element._groupIsInternal = true; element._isAdmin = true; element._groupOwner = false; - sinon.stub(element.$.restAPI, 'getAccount').returns(Promise.resolve({ + sinon.stub(element.restApiService, 'getAccount').returns(Promise.resolve({ name: 'test-user', })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -232,7 +232,7 @@ test('Nav is reloaded when repo changes', () => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -240,7 +240,7 @@ viewPlugins: true, })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccount') .callsFake(() => Promise.resolve({_id: 1})); sinon.stub(element, 'reload'); @@ -254,7 +254,7 @@ test('Nav is reloaded when group changes', () => { sinon.stub(element, '_computeGroupName'); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -262,7 +262,7 @@ viewPlugins: true, })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccount') .callsFake(() => Promise.resolve({_id: 1})); sinon.stub(element, 'reload'); @@ -321,7 +321,7 @@ detail: GerritNav.RepoDetailView.ACCESS, }; sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -329,7 +329,7 @@ viewPlugins: true, })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccount') .callsFake(() => Promise.resolve({_id: 1})); flush(); @@ -484,7 +484,7 @@ suite('_computeSelectedClass', () => { setup(() => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccountCapabilities') .callsFake(() => Promise.resolve({ createGroup: true, @@ -492,7 +492,7 @@ viewPlugins: true, })); sinon.stub( - element.$.restAPI, + element.restApiService, 'getAccount') .callsFake(() => Promise.resolve({_id: 1})); @@ -576,12 +576,12 @@ _loadGroupDetails: () => {}, }); - sinon.stub(element.$.restAPI, 'getGroupConfig') + sinon.stub(element.restApiService, 'getGroupConfig') .returns(Promise.resolve({ name: 'foo', id: 'c0f83e941ce90caea30e6ad88f0d4ea0e841a7a9', })); - sinon.stub(element.$.restAPI, 'getIsGroupOwner') + sinon.stub(element.restApiService, 'getIsGroupOwner') .returns(Promise.resolve(true)); return element.reload(); }); @@ -619,8 +619,8 @@ }); test('external group', () => { - element.$.restAPI.getGroupConfig.restore(); - sinon.stub(element.$.restAPI, 'getGroupConfig') + element.restApiService.getGroupConfig.restore(); + sinon.stub(element.restApiService, 'getGroupConfig') .returns(Promise.resolve({ name: 'foo', id: 'external-id',
diff --git a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts index 2a6c7a8..8a64cb8 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts
@@ -36,16 +36,15 @@ } from '../../../types/common'; import {InheritedBooleanInfoConfiguredValue} from '../../../constants/constants'; import {hasOwnProperty} from '../../../utils/common-util'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrAutocomplete} from '../../shared/gr-autocomplete/gr-autocomplete'; import {IronAutogrowTextareaElement} from '@polymer/iron-autogrow-textarea/iron-autogrow-textarea'; +import {appContext} from '../../../services/app-context'; const SUGGESTIONS_LIMIT = 15; const REF_PREFIX = 'refs/heads/'; export interface GrCreateChangeDialog { $: { - restAPI: RestApiService & Element; privateChangeCheckBox: HTMLInputElement; branchInput: GrAutocomplete; tagNameInput: HTMLInputElement; @@ -93,6 +92,8 @@ @property({type: Boolean}) _privateChangesEnabled?: boolean; + restApiService = appContext.restApiService; + constructor() { super(); this._query = (input: string) => this._getRepoBranchesSuggestions(input); @@ -108,14 +109,14 @@ const promises = []; promises.push( - this.$.restAPI.getProjectConfig(this.repoName).then(config => { + this.restApiService.getProjectConfig(this.repoName).then(config => { if (!config) return; this.privateByDefault = config.private_by_default; }) ); promises.push( - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { if (!config) { return; } @@ -143,7 +144,7 @@ } const isPrivate = this.$.privateChangeCheckBox.checked; const isWip = true; - return this.$.restAPI + return this.restApiService .createChange( this.repoName, this.branch, @@ -169,7 +170,7 @@ if (input.startsWith(REF_PREFIX)) { input = input.substring(REF_PREFIX.length); } - return this.$.restAPI + return this.restApiService .getRepoBranches(input, this.repoName, SUGGESTIONS_LIMIT) .then(response => { if (!response) return [];
diff --git a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_html.ts b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_html.ts index 77e2c3b..47f3818 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_html.ts
@@ -113,5 +113,4 @@ </span> </section> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_test.ts b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_test.ts index e529730..0a4e23d 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_test.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog_test.ts
@@ -68,7 +68,7 @@ }; const saveStub = sinon - .stub(element.$.restAPI, 'createChange') + .stub(element.restApiService, 'createChange') .callsFake(() => Promise.resolve(createChange())); element.branch = 'test-branch' as BranchName; @@ -104,7 +104,7 @@ }; const saveStub = sinon - .stub(element.$.restAPI, 'createChange') + .stub(element.restApiService, 'createChange') .callsFake(() => Promise.resolve(createChange())); element.branch = 'test-branch' as BranchName;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog.ts index 1d8b7db..338494b 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog.ts
@@ -25,14 +25,8 @@ import {encodeURL, getBaseUrl} from '../../../utils/url-util'; import {page} from '../../../utils/page-wrapper-utils'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GroupName} from '../../../types/common'; - -export interface GrCreateGroupDialog { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; @customElement('gr-create-group-dialog') export class GrCreateGroupDialog extends GestureEventListeners( @@ -51,6 +45,8 @@ @property({type: Boolean}) _groupCreated = false; + private restApiService = appContext.restApiService; + _computeGroupUrl(groupId: string) { return getBaseUrl() + '/admin/groups/' + encodeURL(groupId, true); } @@ -62,12 +58,12 @@ handleCreateGroup() { const name = this._name as GroupName; - return this.$.restAPI.createGroup({name}).then(groupRegistered => { + return this.restApiService.createGroup({name}).then(groupRegistered => { if (groupRegistered.status !== 201) { return; } this._groupCreated = true; - return this.$.restAPI.getGroupConfig(name).then(group => { + return this.restApiService.getGroupConfig(name).then(group => { // TODO(TS): should group always defined ? page.show(this._computeGroupUrl(group!.group_id!)); });
diff --git a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_html.ts b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_html.ts index d4ecc5d..daf8780 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_html.ts
@@ -38,5 +38,4 @@ </section> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_test.js b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_test.js index d32ff30..bf0c244 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_test.js +++ b/polygerrit-ui/app/elements/admin/gr-create-group-dialog/gr-create-group-dialog_test.js
@@ -47,10 +47,10 @@ }); test('test for redirecting to group on successful creation', done => { - sinon.stub(element.$.restAPI, 'createGroup') + sinon.stub(element.restApiService, 'createGroup') .returns(Promise.resolve({status: 201})); - sinon.stub(element.$.restAPI, 'getGroupConfig') + sinon.stub(element.restApiService, 'getGroupConfig') .returns(Promise.resolve({group_id: 551})); const showStub = sinon.stub(page, 'show'); @@ -62,10 +62,10 @@ }); test('test for unsuccessful group creation', done => { - sinon.stub(element.$.restAPI, 'createGroup') + sinon.stub(element.restApiService, 'createGroup') .returns(Promise.resolve({status: 409})); - sinon.stub(element.$.restAPI, 'getGroupConfig') + sinon.stub(element.restApiService, 'getGroupConfig') .returns(Promise.resolve({group_id: 551})); const showStub = sinon.stub(page, 'show');
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts index e0a5042..10f5296 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog.ts
@@ -28,19 +28,13 @@ import {page} from '../../../utils/page-wrapper-utils'; import {customElement, property, observe} from '@polymer/decorators'; import {BranchName, RepoName} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; enum DetailType { branches = 'branches', tags = 'tags', } -export interface GrCreatePointerDialog { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-create-pointer-dialog') export class GrCreatePointerDialog extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -75,6 +69,8 @@ this.hasNewItemName = !!name; } + private restApiService = appContext.restApiService; + handleCreateItem() { if (!this.repoName) { throw new Error('repoName name is not set'); @@ -85,7 +81,7 @@ const USE_HEAD = this._itemRevision ? this._itemRevision : 'HEAD'; const url = `${getBaseUrl()}/admin/repos/${encodeURL(this.repoName, true)}`; if (this.itemDetail === DetailType.branches) { - return this.$.restAPI + return this.restApiService .createRepoBranch(this.repoName, this._itemName, {revision: USE_HEAD}) .then(itemRegistered => { if (itemRegistered.status === 201) { @@ -93,7 +89,7 @@ } }); } else if (this.itemDetail === DetailType.tags) { - return this.$.restAPI + return this.restApiService .createRepoTag(this.repoName, this._itemName, { revision: USE_HEAD, message: this._itemAnnotation || undefined,
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_html.ts b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_html.ts index 0b3d81ae..452aab7 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_html.ts
@@ -80,5 +80,4 @@ </section> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.js b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.js index 79a18d5..9c281b1 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.js +++ b/polygerrit-ui/app/elements/admin/gr-create-pointer-dialog/gr-create-pointer-dialog_test.js
@@ -36,7 +36,7 @@ test('branch created', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'createRepoBranch') .callsFake(() => Promise.resolve({})); @@ -58,7 +58,7 @@ test('tag created', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'createRepoTag') .callsFake(() => Promise.resolve({})); @@ -80,7 +80,7 @@ test('tag created with annotations', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'createRepoTag') .callsFake(() => Promise.resolve({}));
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts index 6f0ac19..d8b69c2 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog.ts
@@ -28,10 +28,10 @@ import {encodeURL, getBaseUrl} from '../../../utils/url-util'; import {page} from '../../../utils/page-wrapper-utils'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {ProjectInput, RepoName} from '../../../types/common'; import {hasOwnProperty} from '../../../utils/common-util'; import {AutocompleteQuery} from '../../shared/gr-autocomplete/gr-autocomplete'; +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -39,12 +39,6 @@ } } -export interface GrCreateRepoDialog { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-create-repo-dialog') export class GrCreateRepoDialog extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -78,6 +72,8 @@ @property({type: Object}) _queryGroups: AutocompleteQuery; + private restApiService = appContext.restApiService; + constructor() { super(); this._query = (input: string) => this._getRepoSuggestions(input); @@ -103,16 +99,18 @@ } handleCreateRepo() { - return this.$.restAPI.createRepo(this._repoConfig).then(repoRegistered => { - if (repoRegistered.status === 201) { - this._repoCreated = true; - page.show(this._computeRepoUrl(this._repoConfig.name)); - } - }); + return this.restApiService + .createRepo(this._repoConfig) + .then(repoRegistered => { + if (repoRegistered.status === 201) { + this._repoCreated = true; + page.show(this._computeRepoUrl(this._repoConfig.name)); + } + }); } _getRepoSuggestions(input: string) { - return this.$.restAPI.getSuggestedProjects(input).then(response => { + return this.restApiService.getSuggestedProjects(input).then(response => { const repos = []; for (const key in response) { if (!hasOwnProperty(response, key)) { @@ -128,7 +126,7 @@ } _getGroupSuggestions(input: string) { - return this.$.restAPI.getSuggestedGroups(input).then(response => { + return this.restApiService.getSuggestedGroups(input).then(response => { const groups = []; for (const key in response) { if (!hasOwnProperty(response, key)) {
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_html.ts b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_html.ts index 02aabfe..070ee86 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_html.ts
@@ -99,5 +99,4 @@ </section> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.js b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.js index 1e1fb0e..0af2e23 100644 --- a/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.js +++ b/polygerrit-ui/app/elements/admin/gr-create-repo-dialog/gr-create-repo-dialog_test.js
@@ -44,7 +44,7 @@ owners: ['testId'], }; - const saveStub = sinon.stub(element.$.restAPI, + const saveStub = sinon.stub(element.restApiService, 'createRepo').callsFake(() => Promise.resolve({})); assert.isFalse(element.hasNewRepoName);
diff --git a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts index e5a1586..f17f25f 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log.ts
@@ -27,10 +27,7 @@ import {ListViewMixin} from '../../../mixins/gr-list-view-mixin/gr-list-view-mixin'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property} from '@polymer/decorators'; -import { - ErrorCallback, - RestApiService, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import { GroupInfo, AccountInfo, @@ -38,14 +35,10 @@ GroupAuditEventInfo, } from '../../../types/common'; import {firePageError, fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const GROUP_EVENTS = ['ADD_GROUP', 'REMOVE_GROUP']; -export interface GrGroupAuditLog { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-group-audit-log') export class GrGroupAuditLog extends ListViewMixin( GestureEventListeners(LegacyElementMixin(PolymerElement)) @@ -63,6 +56,8 @@ @property({type: Boolean}) _loading = true; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -84,7 +79,7 @@ firePageError(this, response); }; - return this.$.restAPI + return this.restApiService .getGroupAuditLog(this.groupId, errFn) .then(auditLog => { if (!auditLog) {
diff --git a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_html.ts b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_html.ts index 1212685..32db13f 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_html.ts
@@ -66,5 +66,4 @@ </template> </tbody> </table> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js index 1bbfcae..ce4e4c3 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group-audit-log/gr-group-audit-log_test.js
@@ -80,7 +80,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getGroupAuditLog') + element.restApiService, 'getGroupAuditLog') .callsFake((group, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts index 01571a2..d09b0f51 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members.ts
@@ -31,10 +31,7 @@ import {htmlTemplate} from './gr-group-members_html'; import {getBaseUrl} from '../../../utils/url-util'; import {customElement, property} from '@polymer/decorators'; -import { - RestApiService, - ErrorCallback, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import { GroupId, @@ -51,6 +48,7 @@ firePageError, fireTitleChange, } from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const SUGGESTIONS_LIMIT = 15; const SAVING_ERROR_TEXT = @@ -60,7 +58,6 @@ export interface GrGroupMembers { $: { - restAPI: RestApiService & Element; overlay: GrOverlay; }; } @@ -119,6 +116,8 @@ _itemId?: AccountId | GroupId; + private restApiService = appContext.restApiService; + constructor() { super(); this._queryMembers = input => this._getAccountSuggestions(input); @@ -144,41 +143,45 @@ firePageError(this, response); }; - return this.$.restAPI.getGroupConfig(this.groupId, errFn).then(config => { - if (!config || !config.name) { - return Promise.resolve(); - } + return this.restApiService + .getGroupConfig(this.groupId, errFn) + .then(config => { + if (!config || !config.name) { + return Promise.resolve(); + } - this._groupName = config.name; + this._groupName = config.name; - promises.push( - this.$.restAPI.getIsAdmin().then(isAdmin => { - this._isAdmin = !!isAdmin; - }) - ); + promises.push( + this.restApiService.getIsAdmin().then(isAdmin => { + this._isAdmin = !!isAdmin; + }) + ); - promises.push( - this.$.restAPI.getIsGroupOwner(this._groupName).then(isOwner => { - this._groupOwner = !!isOwner; - }) - ); + promises.push( + this.restApiService.getIsGroupOwner(this._groupName).then(isOwner => { + this._groupOwner = !!isOwner; + }) + ); - promises.push( - this.$.restAPI.getGroupMembers(this._groupName).then(members => { - this._groupMembers = members; - }) - ); + promises.push( + this.restApiService.getGroupMembers(this._groupName).then(members => { + this._groupMembers = members; + }) + ); - promises.push( - this.$.restAPI.getIncludedGroup(this._groupName).then(includedGroup => { - this._includedGroups = includedGroup; - }) - ); + promises.push( + this.restApiService + .getIncludedGroup(this._groupName) + .then(includedGroup => { + this._includedGroups = includedGroup; + }) + ); - return Promise.all(promises).then(() => { - this._loading = false; + return Promise.all(promises).then(() => { + this._loading = false; + }); }); - }); } _computeLoadingClass(loading: boolean) { @@ -210,13 +213,13 @@ if (!this._groupName) { return Promise.reject(new Error('group name undefined')); } - return this.$.restAPI + return this.restApiService .saveGroupMember(this._groupName, this._groupMemberSearchId as AccountId) .then(config => { if (!config || !this._groupName) { return; } - this.$.restAPI.getGroupMembers(this._groupName).then(members => { + this.restApiService.getGroupMembers(this._groupName).then(members => { this._groupMembers = members; }); this._groupMemberSearchName = ''; @@ -230,24 +233,26 @@ } this.$.overlay.close(); if (this._itemType === 'member') { - return this.$.restAPI + return this.restApiService .deleteGroupMember(this._groupName, this._itemId! as AccountId) .then(itemDeleted => { if (itemDeleted.status === 204 && this._groupName) { - this.$.restAPI.getGroupMembers(this._groupName).then(members => { - this._groupMembers = members; - }); + this.restApiService + .getGroupMembers(this._groupName) + .then(members => { + this._groupMembers = members; + }); } }); } else if (this._itemType === 'includedGroup') { - return this.$.restAPI + return this.restApiService .deleteIncludedGroup(this._groupName, this._itemId! as GroupId) .then(itemDeleted => { if ( (itemDeleted.status === 204 || itemDeleted.status === 205) && this._groupName ) { - this.$.restAPI + this.restApiService .getIncludedGroup(this._groupName) .then(includedGroup => { this._includedGroups = includedGroup; @@ -283,7 +288,7 @@ new Error('group name or includedGroupSearchId undefined') ); } - return this.$.restAPI + return this.restApiService .saveIncludedGroup( this._groupName, this._includedGroupSearchId.replace(/\+/g, ' ') as GroupId, @@ -302,9 +307,11 @@ if (!config || !this._groupName) { return; } - this.$.restAPI.getIncludedGroup(this._groupName).then(includedGroup => { - this._includedGroups = includedGroup; - }); + this.restApiService + .getIncludedGroup(this._groupName) + .then(includedGroup => { + this._includedGroups = includedGroup; + }); this._includedGroupSearchName = ''; this._includedGroupSearchId = ''; }); @@ -330,7 +337,7 @@ if (input.length === 0) { return Promise.resolve([]); } - return this.$.restAPI + return this.restApiService .getSuggestedAccounts(input, SUGGESTIONS_LIMIT) .then(accounts => { const accountSuggestions = []; @@ -357,7 +364,7 @@ } _getGroupSuggestions(input: string) { - return this.$.restAPI.getSuggestedGroups(input).then(response => { + return this.restApiService.getSuggestedGroups(input).then(response => { const groups = []; for (const key in response) { if (!hasOwnProperty(response, key)) {
diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_html.ts b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_html.ts index 2d3f8fc..6b6cb31 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_html.ts
@@ -180,5 +180,4 @@ item-type="[[_itemType]]" ></gr-confirm-delete-item-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js index b5d2217..59820b8 100644 --- a/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group-members/gr-group-members_test.js
@@ -139,7 +139,7 @@ stubBaseUrl('https://test/site'); element.groupId = 1; groupStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'getGroupConfig') .callsFake(() => Promise.resolve(groups)); return element._loadGroupDetails(); @@ -162,7 +162,7 @@ const memberName = 'test-admin'; - const saveStub = sinon.stub(element.$.restAPI, 'saveGroupMember') + const saveStub = sinon.stub(element.restApiService, 'saveGroupMember') .callsFake(() => Promise.resolve({})); const button = element.$.saveGroupMember; @@ -188,7 +188,7 @@ const includedGroupName = 'testName'; const saveIncludedGroupStub = sinon.stub( - element.$.restAPI, 'saveIncludedGroup') + element.restApiService, 'saveIncludedGroup') .callsFake(() => Promise.resolve({})); const button = element.$.saveIncludedGroups; @@ -219,7 +219,7 @@ status: 404, ok: false, }; - sinon.stub(element.$.restAPI._restApiHelper, 'fetch').callsFake( + sinon.stub(element.restApiService._restApiHelper, 'fetch').callsFake( () => Promise.resolve(errorResponse)); element.$.groupMemberSearchInput.text = memberName; @@ -237,7 +237,7 @@ const alertStub = sinon.stub(); element.addEventListener('show-alert', alertStub); const err = new Error(); - sinon.stub(element.$.restAPI._restApiHelper, 'fetch').callsFake( + sinon.stub(element.restApiService._restApiHelper, 'fetch').callsFake( () => Promise.reject(err)); element.$.groupMemberSearchInput.text = memberName; @@ -367,7 +367,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getGroupConfig') + element.restApiService, 'getGroupConfig') .callsFake((group, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts b/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts index 4525543..ce8ad9c 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group.ts
@@ -33,12 +33,10 @@ AutocompleteQuery, } from '../../shared/gr-autocomplete/gr-autocomplete'; import {GroupId, GroupInfo, GroupName} from '../../../types/common'; -import { - ErrorCallback, - RestApiService, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {hasOwnProperty} from '../../../utils/common-util'; import {firePageError, fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const INTERNAL_GROUP_REGEX = /^[\da-f]{40}$/; @@ -55,7 +53,6 @@ export interface GrGroup { $: { - restAPI: RestApiService & Element; loading: HTMLDivElement; }; } @@ -127,6 +124,8 @@ @property({type: Boolean}) _isAdmin = false; + private restApiService = appContext.restApiService; + constructor() { super(); this._query = (input: string) => this._getGroupSuggestions(input); @@ -149,41 +148,43 @@ firePageError(this, response); }; - return this.$.restAPI.getGroupConfig(this.groupId, errFn).then(config => { - if (!config || !config.name) { - return Promise.resolve(); - } + return this.restApiService + .getGroupConfig(this.groupId, errFn) + .then(config => { + if (!config || !config.name) { + return Promise.resolve(); + } - this._groupName = config.name; - this._groupIsInternal = !!config.id.match(INTERNAL_GROUP_REGEX); + this._groupName = config.name; + this._groupIsInternal = !!config.id.match(INTERNAL_GROUP_REGEX); - promises.push( - this.$.restAPI.getIsAdmin().then(isAdmin => { - this._isAdmin = !!isAdmin; - }) - ); + promises.push( + this.restApiService.getIsAdmin().then(isAdmin => { + this._isAdmin = !!isAdmin; + }) + ); - promises.push( - this.$.restAPI.getIsGroupOwner(config.name).then(isOwner => { - this._groupOwner = !!isOwner; - }) - ); + promises.push( + this.restApiService.getIsGroupOwner(config.name).then(isOwner => { + this._groupOwner = !!isOwner; + }) + ); - // If visible to all is undefined, set to false. If it is defined - // as false, setting to false is fine. If any optional values - // are added with a default of true, then this would need to be an - // undefined check and not a truthy/falsy check. - if (config.options && !config.options.visible_to_all) { - config.options.visible_to_all = false; - } - this._groupConfig = config; + // If visible to all is undefined, set to false. If it is defined + // as false, setting to false is fine. If any optional values + // are added with a default of true, then this would need to be an + // undefined check and not a truthy/falsy check. + if (config.options && !config.options.visible_to_all) { + config.options.visible_to_all = false; + } + this._groupConfig = config; - fireTitleChange(this, config.name); + fireTitleChange(this, config.name); - return Promise.all(promises).then(() => { - this._loading = false; + return Promise.all(promises).then(() => { + this._loading = false; + }); }); - }); } _computeLoadingClass(loading: boolean) { @@ -200,7 +201,7 @@ return Promise.reject(new Error('invalid groupId or config name')); } const groupName = groupConfig.name; - return this.$.restAPI + return this.restApiService .saveGroupName(this.groupId, groupName) .then(config => { if (config.status === 200) { @@ -228,7 +229,7 @@ owner = decodeURIComponent(this._groupConfigOwner); } if (!owner) return; - return this.$.restAPI.saveGroupOwner(this.groupId, owner).then(() => { + return this.restApiService.saveGroupOwner(this.groupId, owner).then(() => { this._owner = false; }); } @@ -236,7 +237,7 @@ _handleSaveDescription() { if (!this.groupId || !this._groupConfig || !this._groupConfig.description) return; - return this.$.restAPI + return this.restApiService .saveGroupDescription(this.groupId, this._groupConfig.description) .then(() => { this._description = false; @@ -250,9 +251,11 @@ const options = {visible_to_all: visible}; - return this.$.restAPI.saveGroupOptions(this.groupId, options).then(() => { - this._options = false; - }); + return this.restApiService + .saveGroupOptions(this.groupId, options) + .then(() => { + this._options = false; + }); } @observe('_groupConfig.name') @@ -292,7 +295,7 @@ } _getGroupSuggestions(input: string) { - return this.$.restAPI.getSuggestedGroups(input).then(response => { + return this.restApiService.getSuggestedGroups(input).then(response => { const groups: AutocompleteSuggestion[] = []; for (const key in response) { if (!hasOwnProperty(response, key)) {
diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group_html.ts b/polygerrit-ui/app/elements/admin/gr-group/gr-group_html.ts index aed73bf..4dcc1b8 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group_html.ts
@@ -165,5 +165,4 @@ </div> </div> </main> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js index 34f6b6a..c006251 100644 --- a/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js +++ b/polygerrit-ui/app/elements/admin/gr-group/gr-group_test.js
@@ -41,7 +41,7 @@ }); element = basicFixture.instantiate(); groupStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'getGroupConfig') .callsFake(() => Promise.resolve(group)); }); @@ -56,7 +56,7 @@ test('default values are populated with internal group', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getIsGroupOwner') .callsFake(() => Promise.resolve(true)); element.groupId = 1; @@ -72,11 +72,11 @@ groupExternal.id = 'external-group-id'; groupStub.restore(); groupStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'getGroupConfig') .callsFake(() => Promise.resolve(groupExternal)); sinon.stub( - element.$.restAPI, + element.restApiService, 'getIsGroupOwner') .callsFake(() => Promise.resolve(true)); element.groupId = 1; @@ -97,12 +97,12 @@ element._groupName = groupName; sinon.stub( - element.$.restAPI, + element.restApiService, 'getIsGroupOwner') .callsFake(() => Promise.resolve(true)); sinon.stub( - element.$.restAPI, + element.restApiService, 'saveGroupName') .callsFake(() => Promise.resolve({status: 200})); @@ -136,7 +136,7 @@ element._groupOwner = true; sinon.stub( - element.$.restAPI, + element.restApiService, 'getIsGroupOwner') .callsFake(() => Promise.resolve({status: 200})); @@ -163,7 +163,7 @@ groupStub.restore(); sinon.stub( - element.$.restAPI, + element.restApiService, 'getGroupConfig') .callsFake(() => Promise.resolve({})); @@ -189,7 +189,7 @@ name: 'test-group', }; element.groupId = 'gg'; - sinon.stub(element.$.restAPI, 'saveGroupName') + sinon.stub(element.restApiService, 'saveGroupName') .returns(Promise.resolve({status: 200})); const showStub = sinon.stub(element, 'dispatchEvent'); @@ -240,7 +240,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getGroupConfig').callsFake((group, errFn) => { + element.restApiService, 'getGroupConfig').callsFake((group, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.ts b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.ts index c998cd8..e81543c 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.ts +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission.ts
@@ -34,7 +34,6 @@ PermissionArray, } from '../../../utils/access-util'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {hasOwnProperty} from '../../../utils/common-util'; import { LabelNameToLabelTypeInfoMap, @@ -56,6 +55,7 @@ EditableProjectAccessGroups, } from '../gr-repo-access/gr-repo-access-interfaces'; import {PolymerDomRepeatEvent} from '../../../types/types'; +import {appContext} from '../../../services/app-context'; const MAX_AUTOCOMPLETE_RESULTS = 20; @@ -65,7 +65,6 @@ export interface GrPermission { $: { - restAPI: RestApiService & Element; groupAutocomplete: GrAutocomplete; }; } @@ -142,6 +141,8 @@ @property({type: Boolean}) _originalExclusiveValue?: boolean; + private restApiService = appContext.restApiService; + constructor() { super(); this._query = () => this._getGroupSuggestions(); @@ -337,7 +338,7 @@ } _getGroupSuggestions(): Promise<AutocompleteSuggestion[]> { - return this.$.restAPI + return this.restApiService .getSuggestedGroups(this._groupFilter || '', MAX_AUTOCOMPLETE_RESULTS) .then(response => { const groups: GroupSuggestion[] = [];
diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_html.ts b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_html.ts index 9795c92..6ae982b 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_html.ts
@@ -140,5 +140,4 @@ </div> <!-- end deletedContainer --> </section> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.js b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.js index 32430ec..c9b0131 100644 --- a/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.js +++ b/polygerrit-ui/app/elements/admin/gr-permission/gr-permission_test.js
@@ -25,7 +25,7 @@ setup(() => { element = basicFixture.instantiate(); - sinon.stub(element.$.restAPI, 'getSuggestedGroups').returns( + sinon.stub(element.restApiService, 'getSuggestedGroups').returns( Promise.resolve({ 'Administrators': { id: '4c97682e6ce61b7247f3381b6f1789356666de7f',
diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts index 9337042..03f0eff 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list.ts
@@ -27,20 +27,15 @@ ListViewParams, } from '../../../mixins/gr-list-view-mixin/gr-list-view-mixin'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {PluginInfo} from '../../../types/common'; import {firePageError} from '../../../utils/event-util'; import {fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; interface PluginInfoWithName extends PluginInfo { name: string; } -export interface GrPluginList { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-plugin-list') export class GrPluginList extends ListViewMixin( GestureEventListeners(LegacyElementMixin(PolymerElement)) @@ -83,6 +78,8 @@ @property({type: String}) _filter = ''; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -101,7 +98,7 @@ const errFn: ErrorCallback = response => { firePageError(this, response); }; - return this.$.restAPI + return this.restApiService .getPlugins(filter, pluginsPerPage, offset, errFn) .then(plugins => { if (!plugins) {
diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_html.ts b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_html.ts index d5318b5..eeca478 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_html.ts
@@ -78,5 +78,4 @@ </tbody> </table> </gr-list-view> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js index 7303748..6aa247f 100644 --- a/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-plugin-list/gr-plugin-list_test.js
@@ -131,7 +131,7 @@ suite('filter', () => { test('_paramsChanged', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getPlugins') .callsFake(() => Promise.resolve(plugins)); const value = { @@ -139,11 +139,11 @@ offset: 25, }; element._paramsChanged(value).then(() => { - assert.equal(element.$.restAPI.getPlugins.lastCall.args[0], + assert.equal(element.restApiService.getPlugins.lastCall.args[0], 'test'); - assert.equal(element.$.restAPI.getPlugins.lastCall.args[1], + assert.equal(element.restApiService.getPlugins.lastCall.args[1], 25); - assert.equal(element.$.restAPI.getPlugins.lastCall.args[2], + assert.equal(element.restApiService.getPlugins.lastCall.args[2], 25); done(); }); @@ -168,7 +168,7 @@ suite('404', () => { test('fires page-error', done => { const response = {status: 404}; - sinon.stub(element.$.restAPI, 'getPlugins').callsFake( + sinon.stub(element.restApiService, 'getPlugins').callsFake( (filter, pluginsPerPage, opt_offset, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts index 31e1f65..79ee2c8 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access.ts
@@ -38,7 +38,6 @@ UrlEncodedRepoName, ProjectAccessGroups, } from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {hasOwnProperty} from '../../../utils/common-util'; import {GrButton} from '../../shared/gr-button/gr-button'; import {GrAccessSection} from '../gr-access-section/gr-access-section'; @@ -53,17 +52,12 @@ PrimitiveValue, } from './gr-repo-access-interfaces'; import {firePageError, fireAlert} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const NOTHING_TO_SAVE = 'No changes to save.'; const MAX_AUTOCOMPLETE_RESULTS = 50; -export interface GrRepoAccess { - $: { - restAPI: RestApiService & Element; - }; -} - /** * Fired when save is a no-op * @@ -127,6 +121,8 @@ private _originalInheritsFrom?: ProjectInfo | null; + private restApiService = appContext.restApiService; + constructor() { super(); this._query = () => this._getInheritFromSuggestions(); @@ -163,7 +159,7 @@ // Always reset sections when a project changes. this._sections = []; - const sectionsPromises = this.$.restAPI + const sectionsPromises = this.restApiService .getRepoAccessRights(repo, errFn) .then(res => { if (!res) { @@ -199,7 +195,7 @@ return toSortedPermissionsArray(this._local); }); - const capabilitiesPromises = this.$.restAPI + const capabilitiesPromises = this.restApiService .getCapabilities(errFn) .then(res => { if (!res) { @@ -209,13 +205,15 @@ return res; }); - const labelsPromises = this.$.restAPI.getRepo(repo, errFn).then(res => { - if (!res) { - return Promise.resolve(undefined); - } + const labelsPromises = this.restApiService + .getRepo(repo, errFn) + .then(res => { + if (!res) { + return Promise.resolve(undefined); + } - return res.labels; - }); + return res.labels; + }); return Promise.all([ sectionsPromises, @@ -247,7 +245,7 @@ } _getInheritFromSuggestions(): Promise<AutocompleteSuggestion[]> { - return this.$.restAPI + return this.restApiService .getRepos(this._inheritFromFilter, MAX_AUTOCOMPLETE_RESULTS) .then(response => { const projects: AutocompleteSuggestion[] = []; @@ -537,7 +535,7 @@ if (!repo) { return Promise.resolve(); } - return this.$.restAPI + return this.restApiService .setRepoAccessRights(repo, obj) .then(() => { this._reload(repo); @@ -562,7 +560,7 @@ if (!this.repo) { return; } - return this.$.restAPI + return this.restApiService .setRepoAccessRightsForReview(this.repo, obj) .then(change => { GerritNav.navigateToChange(change);
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_html.ts b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_html.ts index 4e76360..a16ad28 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_html.ts
@@ -143,5 +143,4 @@ </div> </div> </main> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js index d3204e1..2af4b6f1 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-access/gr-repo-access_test.js
@@ -104,7 +104,7 @@ stub('gr-rest-api-interface', { getAccount() { return Promise.resolve(null); }, }); - repoStub = sinon.stub(element.$.restAPI, 'getRepo').returns( + repoStub = sinon.stub(element.restApiService, 'getRepo').returns( Promise.resolve(repoRes)); element._loading = false; element._ownerOf = []; @@ -118,14 +118,14 @@ }); test('_repoChanged', done => { - const accessStub = sinon.stub(element.$.restAPI, + const accessStub = sinon.stub(element.restApiService, 'getRepoAccessRights'); accessStub.withArgs('New Repo').returns( Promise.resolve(JSON.parse(JSON.stringify(accessRes)))); accessStub.withArgs('Another New Repo') .returns(Promise.resolve(JSON.parse(JSON.stringify(accessRes2)))); - const capabilitiesStub = sinon.stub(element.$.restAPI, + const capabilitiesStub = sinon.stub(element.restApiService, 'getCapabilities'); capabilitiesStub.returns(Promise.resolve(capabilitiesRes)); @@ -160,9 +160,9 @@ name: 'Access Database', }, }; - const accessStub = sinon.stub(element.$.restAPI, 'getRepoAccessRights') + const accessStub = sinon.stub(element.restApiService, 'getRepoAccessRights') .returns(Promise.resolve(JSON.parse(JSON.stringify(accessRes2)))); - const capabilitiesStub = sinon.stub(element.$.restAPI, + const capabilitiesStub = sinon.stub(element.restApiService, 'getCapabilities').returns(Promise.resolve(capabilitiesRes)); element._repoChanged().then(() => { @@ -241,7 +241,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getRepoAccessRights') + element.restApiService, 'getRepoAccessRights') .callsFake((repoName, errFn) => { errFn(response); }); @@ -378,7 +378,7 @@ test('_handleSaveForReview', () => { const saveStub = - sinon.stub(element.$.restAPI, 'setRepoAccessRightsForReview'); + sinon.stub(element.restApiService, 'setRepoAccessRightsForReview'); sinon.stub(element, '_computeAddAndRemove').returns({ add: {}, remove: {}, @@ -1161,11 +1161,11 @@ }, }, }; - sinon.stub(element.$.restAPI, 'getRepoAccessRights').returns( + sinon.stub(element.restApiService, 'getRepoAccessRights').returns( Promise.resolve(JSON.parse(JSON.stringify(accessRes)))); sinon.stub(GerritNav, 'navigateToChange'); let resolver; - const saveStub = sinon.stub(element.$.restAPI, + const saveStub = sinon.stub(element.restApiService, 'setRepoAccessRights') .returns(new Promise(r => resolver = r)); @@ -1208,11 +1208,11 @@ }, }, }; - sinon.stub(element.$.restAPI, 'getRepoAccessRights').returns( + sinon.stub(element.restApiService, 'getRepoAccessRights').returns( Promise.resolve(JSON.parse(JSON.stringify(accessRes)))); sinon.stub(GerritNav, 'navigateToChange'); let resolver; - const saveForReviewStub = sinon.stub(element.$.restAPI, + const saveForReviewStub = sinon.stub(element.restApiService, 'setRepoAccessRightsForReview') .returns(new Promise(r => resolver = r));
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts index 14cfedd..c57c52f 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands.ts
@@ -30,10 +30,7 @@ import {htmlTemplate} from './gr-repo-commands_html'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property} from '@polymer/decorators'; -import { - ErrorCallback, - RestApiService, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import { BranchName, ConfigInfo, @@ -47,6 +44,7 @@ firePageError, fireTitleChange, } from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const GC_MESSAGE = 'Garbage collection completed successfully.'; const CONFIG_BRANCH = 'refs/meta/config' as BranchName; @@ -58,7 +56,6 @@ export interface GrRepoCommands { $: { - restAPI: RestApiService & Element; createChangeOverlay: GrOverlay; createNewChangeModal: GrCreateChangeDialog; }; @@ -95,6 +92,8 @@ @property({type: Boolean}) _runningGC = false; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -111,7 +110,7 @@ firePageError(this, response); }; - this.$.restAPI.getProjectConfig(this.repo, errFn).then(config => { + this.restApiService.getProjectConfig(this.repo, errFn).then(config => { if (!config) return; // Do not process the response, if the component is not attached to the // DOM anymore, which at least in tests can happen. @@ -131,7 +130,7 @@ _handleRunningGC() { this._runningGC = true; - return this.$.restAPI + return this.restApiService .runRepoGC(this.repo) .then(response => { if (response?.status === 200) { @@ -164,7 +163,7 @@ */ _handleEditRepoConfig() { this._editingConfig = true; - return this.$.restAPI + return this.restApiService .createChange( this.repo, CONFIG_BRANCH,
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_html.ts b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_html.ts index 3880e4a..d69692d 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_html.ts
@@ -88,5 +88,4 @@ </div> </gr-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js index efe4012..60d5f20 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-commands/gr-repo-commands_test.js
@@ -31,7 +31,7 @@ // Note that this probably does not achieve what it is supposed to, because // getProjectConfig() is called as soon as the element is attached, so // stubbing it here has not effect anymore. - repoStub = sinon.stub(element.$.restAPI, 'getProjectConfig') + repoStub = sinon.stub(element.restApiService, 'getProjectConfig') .returns(Promise.resolve({})); }); @@ -68,7 +68,7 @@ let alertStub; setup(() => { - createChangeStub = sinon.stub(element.$.restAPI, 'createChange'); + createChangeStub = sinon.stub(element.restApiService, 'createChange'); urlStub = sinon.stub(GerritNav, 'getEditUrlForDiff'); sinon.stub(GerritNav, 'navigateToRelativeUrl'); handleSpy = sinon.spy(element, '_handleEditRepoConfig'); @@ -119,7 +119,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getProjectConfig') + element.restApiService, 'getProjectConfig') .callsFake((repo, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts index 99f85fa..fd10a63 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards.ts
@@ -24,21 +24,16 @@ import {htmlTemplate} from './gr-repo-dashboards_html'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {RepoName, DashboardId, DashboardInfo} from '../../../types/common'; import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {firePageError} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; interface DashboardRef { section: string; dashboards: DashboardInfo[]; } -export interface GrRepoDashboards { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-repo-dashboards') export class GrRepoDashboards extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -56,6 +51,8 @@ @property({type: Array}) _dashboards?: DashboardRef[]; + private restApiService = appContext.restApiService; + _repoChanged(repo?: RepoName) { this._loading = true; if (!repo) { @@ -66,7 +63,7 @@ firePageError(this, response); }; - return this.$.restAPI + return this.restApiService .getRepoDashboards(repo, errFn) .then((res?: DashboardInfo[]) => { if (!res) {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_html.ts b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_html.ts index 7cdd10e..51ea417 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_html.ts
@@ -67,5 +67,4 @@ </template> </tbody> </table> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js index b4d3575..f5d4365 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-dashboards/gr-repo-dashboards_test.js
@@ -30,7 +30,7 @@ suite('dashboard table', () => { setup(() => { - sinon.stub(element.$.restAPI, 'getRepoDashboards').returns( + sinon.stub(element.restApiService, 'getRepoDashboards').returns( Promise.resolve([ { id: 'default:contributor', @@ -124,7 +124,7 @@ test('fires page-error', done => { const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getRepoDashboards') + element.restApiService, 'getRepoDashboards') .callsFake((repo, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts index 17414c0..168596a 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list.ts
@@ -36,10 +36,7 @@ import {ListViewMixin} from '../../../mixins/gr-list-view-mixin/gr-list-view-mixin'; import {encodeURL} from '../../../utils/url-util'; import {customElement, property} from '@polymer/decorators'; -import { - ErrorCallback, - RestApiService, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {GrCreatePointerDialog} from '../gr-create-pointer-dialog/gr-create-pointer-dialog'; import { @@ -54,12 +51,12 @@ import {PolymerDomRepeatEvent} from '../../../types/types'; import {RepoDetailView} from '../../core/gr-navigation/gr-navigation'; import {firePageError} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const PGP_START = '-----BEGIN PGP SIGNATURE-----'; export interface GrRepoDetailList { $: { - restAPI: RestApiService & Element; overlay: GrOverlay; createOverlay: GrOverlay; createNewModal: GrCreatePointerDialog; @@ -121,8 +118,10 @@ @property({type: String}) _revisedRef?: GitRef; + private readonly restApiService = appContext.restApiService; + _determineIfOwner(repo: RepoName) { - return this.$.restAPI + return this.restApiService .getRepoAccess(repo) .then(access => (this._isOwner = !!access && !!access[repo].is_owner)); } @@ -187,7 +186,7 @@ }; if (detailType === RepoDetailView.BRANCHES) { - return this.$.restAPI + return this.restApiService .getRepoBranches(filter, repo, itemsPerPage, offset, errFn) .then(items => { if (!items) { @@ -197,7 +196,7 @@ this._loading = false; }); } else if (detailType === RepoDetailView.TAGS) { - return this.$.restAPI + return this.restApiService .getRepoTags(filter, repo, itemsPerPage, offset, errFn) .then(items => { if (!items) { @@ -245,7 +244,7 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _computeEditingClass(isEditing: boolean) { @@ -273,7 +272,7 @@ } _setRepoHead(repo: RepoName, ref: GitRef, e: PolymerDomRepeatEvent<GitRef>) { - return this.$.restAPI.setRepoHead(repo, ref).then(res => { + return this.restApiService.setRepoHead(repo, ref).then(res => { if (res.status < 400) { this._isEditing = false; e.model.set('item.revision', ref); @@ -305,7 +304,7 @@ return Promise.reject(new Error('undefined repo or refName')); } if (this.detailType === RepoDetailView.BRANCHES) { - return this.$.restAPI + return this.restApiService .deleteRepoBranches(this._repo, this._refName) .then(itemDeleted => { if (itemDeleted.status === 204) { @@ -319,7 +318,7 @@ } }); } else if (this.detailType === RepoDetailView.TAGS) { - return this.$.restAPI + return this.restApiService .deleteRepoTags(this._repo, this._refName) .then(itemDeleted => { if (itemDeleted.status === 204) {
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_html.ts b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_html.ts index 196797f..4435d3a 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_html.ts
@@ -220,5 +220,4 @@ </div> </gr-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js index 7727821..f20fd1e 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-detail-list/gr-repo-detail-list_test.js
@@ -118,7 +118,7 @@ test('Edit HEAD button not admin', done => { sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(true)); - sinon.stub(element.$.restAPI, 'getRepoAccess').returns( + sinon.stub(element.restApiService, 'getRepoAccess').returns( Promise.resolve({ test: {is_owner: false}, })); @@ -142,7 +142,7 @@ .querySelector('.revisionWithEditing'); sinon.stub(element, '_getLoggedIn').returns(Promise.resolve(true)); - sinon.stub(element.$.restAPI, 'getRepoAccess').returns( + sinon.stub(element.restApiService, 'getRepoAccess').returns( Promise.resolve({ test: {is_owner: true}, })); @@ -219,7 +219,7 @@ test('_handleSaveRevision with invalid rev', done => { const event = {model: {set: sinon.stub()}}; element._isEditing = true; - sinon.stub(element.$.restAPI, 'setRepoHead').returns( + sinon.stub(element.restApiService, 'setRepoHead').returns( Promise.resolve({ status: 400, }) @@ -235,7 +235,7 @@ test('_handleSaveRevision with valid rev', done => { const event = {model: {set: sinon.stub()}}; element._isEditing = true; - sinon.stub(element.$.restAPI, 'setRepoHead').returns( + sinon.stub(element.restApiService, 'setRepoHead').returns( Promise.resolve({ status: 200, }) @@ -280,7 +280,7 @@ suite('filter', () => { test('_paramsChanged', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getRepoBranches') .callsFake(() => Promise.resolve(branches)); const params = { @@ -290,13 +290,13 @@ offset: 25, }; element._paramsChanged(params).then(() => { - assert.equal(element.$.restAPI.getRepoBranches.lastCall.args[0], + assert.equal(element.restApiService.getRepoBranches.lastCall.args[0], 'test'); - assert.equal(element.$.restAPI.getRepoBranches.lastCall.args[1], + assert.equal(element.restApiService.getRepoBranches.lastCall.args[1], 'test'); - assert.equal(element.$.restAPI.getRepoBranches.lastCall.args[2], + assert.equal(element.restApiService.getRepoBranches.lastCall.args[2], 25); - assert.equal(element.$.restAPI.getRepoBranches.lastCall.args[3], + assert.equal(element.restApiService.getRepoBranches.lastCall.args[3], 25); done(); }); @@ -306,7 +306,7 @@ suite('404', () => { test('fires page-error', done => { const response = {status: 404}; - sinon.stub(element.$.restAPI, 'getRepoBranches').callsFake( + sinon.stub(element.restApiService, 'getRepoBranches').callsFake( (filter, repo, reposBranchesPerPage, opt_offset, errFn) => { errFn(response); }); @@ -458,7 +458,7 @@ suite('filter', () => { test('_paramsChanged', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getRepoTags') .callsFake(() => Promise.resolve(tags)); const params = { @@ -468,13 +468,13 @@ offset: 25, }; element._paramsChanged(params).then(() => { - assert.equal(element.$.restAPI.getRepoTags.lastCall.args[0], + assert.equal(element.restApiService.getRepoTags.lastCall.args[0], 'test'); - assert.equal(element.$.restAPI.getRepoTags.lastCall.args[1], + assert.equal(element.restApiService.getRepoTags.lastCall.args[1], 'test'); - assert.equal(element.$.restAPI.getRepoTags.lastCall.args[2], + assert.equal(element.restApiService.getRepoTags.lastCall.args[2], 25); - assert.equal(element.$.restAPI.getRepoTags.lastCall.args[3], + assert.equal(element.restApiService.getRepoTags.lastCall.args[3], 25); done(); }); @@ -520,7 +520,7 @@ suite('404', () => { test('fires page-error', done => { const response = {status: 404}; - sinon.stub(element.$.restAPI, 'getRepoTags').callsFake( + sinon.stub(element.restApiService, 'getRepoTags').callsFake( (filter, repo, reposTagsPerPage, opt_offset, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.ts b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.ts index a566eb0..4d6fcd04 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list.ts
@@ -29,12 +29,12 @@ import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property, observe, computed} from '@polymer/decorators'; import {AppElementAdminParams} from '../../gr-app-types'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {RepoName, ProjectInfoWithName} from '../../../types/common'; import {GrCreateRepoDialog} from '../gr-create-repo-dialog/gr-create-repo-dialog'; import {ProjectState} from '../../../constants/constants'; import {fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -44,7 +44,6 @@ export interface GrRepoList { $: { - restAPI: RestApiService & Element; createOverlay: GrOverlay; createNewModal: GrCreateRepoDialog; }; @@ -90,6 +89,8 @@ return this.computeShownItems(this._repos); } + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -125,11 +126,11 @@ } _getCreateRepoCapability() { - return this.$.restAPI.getAccount().then(account => { + return this.restApiService.getAccount().then(account => { if (!account) { return; } - return this.$.restAPI + return this.restApiService .getAccountCapabilities(['createProject']) .then(capabilities => { if (capabilities?.createProject) { @@ -141,18 +142,20 @@ _getRepos(filter: string, reposPerPage: number, offset?: number) { this._repos = []; - return this.$.restAPI.getRepos(filter, reposPerPage, offset).then(repos => { - // Late response. - if (filter !== this._filter || !repos) { - return; - } - this._repos = repos; - this._loading = false; - }); + return this.restApiService + .getRepos(filter, reposPerPage, offset) + .then(repos => { + // Late response. + if (filter !== this._filter || !repos) { + return; + } + this._repos = repos; + this._loading = false; + }); } _refreshReposList() { - this.$.restAPI.invalidateReposCache(); + this.restApiService.invalidateReposCache(); return this._getRepos(this._filter, this._reposPerPage, this._offset); }
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_html.ts b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_html.ts index 4889845..20c72f9 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_html.ts
@@ -115,5 +115,4 @@ </div> </gr-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js index e2a29f2..baa33a7 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo-list/gr-repo-list_test.js
@@ -109,21 +109,21 @@ }); test('_paramsChanged', done => { - sinon.stub(element.$.restAPI, 'getRepos') + sinon.stub(element.restApiService, 'getRepos') .callsFake( () => Promise.resolve(repos)); const value = { filter: 'test', offset: 25, }; element._paramsChanged(value).then(() => { - assert.isTrue(element.$.restAPI.getRepos.lastCall + assert.isTrue(element.restApiService.getRepos.lastCall .calledWithExactly('test', 25, 25)); done(); }); }); test('latest repos requested are always set', done => { - const repoStub = sinon.stub(element.$.restAPI, 'getRepos'); + const repoStub = sinon.stub(element.restApiService, 'getRepos'); repoStub.withArgs('test').returns(Promise.resolve(repos)); repoStub.withArgs('filter').returns(Promise.resolve(reposFiltered)); element._filter = 'test';
diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts index 16435e5..acde142 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo.ts
@@ -31,10 +31,7 @@ import {htmlTemplate} from './gr-repo_html'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property, observe} from '@polymer/decorators'; -import { - RestApiService, - ErrorCallback, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import { ConfigInfo, RepoName, @@ -49,6 +46,7 @@ import {PolymerDeepPropertyChange} from '@polymer/polymer/interfaces'; import {hasOwnProperty} from '../../../utils/common-util'; import {firePageError, fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const STATES = { active: {value: ProjectState.ACTIVE, label: 'Active'}, @@ -84,11 +82,6 @@ }, }; -export interface GrRepo { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-repo') export class GrRepo extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -145,6 +138,8 @@ @property({type: Object}) _schemesObj?: SchemesInfoMap; + private restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -186,7 +181,7 @@ if (loggedIn) { const repo = this.repo; if (!repo) throw new Error('undefined repo'); - this.$.restAPI.getRepoAccess(repo).then(access => { + this.restApiService.getRepoAccess(repo).then(access => { if (!access || this.repo !== repo) { return; } @@ -199,7 +194,7 @@ ); promises.push( - this.$.restAPI.getProjectConfig(this.repo, errFn).then(config => { + this.restApiService.getProjectConfig(this.repo, errFn).then(config => { if (!config) { return; } @@ -221,7 +216,7 @@ ); promises.push( - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { if (!config) { return; } @@ -245,7 +240,7 @@ if (!_loggedIn) { return; } - this.$.restAPI.getPreferences().then(prefs => { + this.restApiService.getPreferences().then(prefs => { if (prefs?.download_scheme) { // Note (issue 5180): normalize the download scheme with lower-case. this._selectedScheme = prefs.download_scheme.toLowerCase(); @@ -313,7 +308,7 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _formatRepoConfigForSave(repoConfig: ConfigInfo): ConfigInput { @@ -346,7 +341,7 @@ _handleSaveRepoConfig() { if (!this._repoConfig || !this.repo) return Promise.reject(new Error('undefined repoConfig or repo')); - return this.$.restAPI + return this.restApiService .saveRepoConfig( this.repo, this._formatRepoConfigForSave(this._repoConfig)
diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_html.ts b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_html.ts index 2e86758..5bfb7e6 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_html.ts
@@ -436,5 +436,4 @@ </div> </div> </main> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js index 93a9d64..29a83941 100644 --- a/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js +++ b/polygerrit-ui/app/elements/admin/gr-repo/gr-repo_test.js
@@ -106,7 +106,7 @@ }); element = basicFixture.instantiate(); repoStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'getProjectConfig') .callsFake(() => Promise.resolve(repoConf)); }); @@ -171,7 +171,7 @@ element.repo = REPO; sinon.stub(element, '_getLoggedIn').callsFake(() => Promise.resolve(true)); sinon.stub( - element.$.restAPI, + element.restApiService, 'getRepoAccess') .callsFake(() => Promise.resolve({'test-repo': {}})); element._loadRepo().then(() => { @@ -247,7 +247,7 @@ const response = {status: 404}; sinon.stub( - element.$.restAPI, 'getProjectConfig').callsFake((repo, errFn) => { + element.restApiService, 'getProjectConfig').callsFake((repo, errFn) => { errFn(response); }); element.addEventListener('page-error', e => { @@ -264,7 +264,7 @@ sinon.stub(element, '_getLoggedIn') .callsFake(() => Promise.resolve(true)); sinon.stub( - element.$.restAPI, + element.restApiService, 'getRepoAccess') .callsFake(() => Promise.resolve({'test-repo': {is_owner: true}})); }); @@ -322,7 +322,7 @@ enable_reviewer_by_email: 'TRUE', }; - const saveStub = sinon.stub(element.$.restAPI, 'saveRepoConfig') + const saveStub = sinon.stub(element.restApiService, 'saveRepoConfig') .callsFake(() => Promise.resolve({})); const button = element.root.querySelector('gr-button');
diff --git a/polygerrit-ui/app/elements/admin/gr-rule-editor/gr-rule-editor_html.ts b/polygerrit-ui/app/elements/admin/gr-rule-editor/gr-rule-editor_html.ts index 98403e0..c4d7688 100644 --- a/polygerrit-ui/app/elements/admin/gr-rule-editor/gr-rule-editor_html.ts +++ b/polygerrit-ui/app/elements/admin/gr-rule-editor/gr-rule-editor_html.ts
@@ -156,5 +156,4 @@ >Undo</gr-button > </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts index 3391901..1484e6e 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view.ts
@@ -36,12 +36,12 @@ EmailAddress, PreferencesInput, } from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {ChangeListToggleReviewedDetail} from '../gr-change-list-item/gr-change-list-item'; import {ChangeStarToggleStarDetail} from '../../shared/gr-change-star/gr-change-star'; import {hasOwnProperty} from '../../../utils/common-util'; import {ChangeListViewState} from '../../../types/types'; import {fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const LookupQueryPatterns = { CHANGE_ID: /^\s*i?[0-9a-f]{7,40}\s*$/i, @@ -57,7 +57,6 @@ export interface GrChangeListView { $: { - restAPI: RestApiService & Element; prevArrow: HTMLAnchorElement; nextArrow: HTMLAnchorElement; }; @@ -113,6 +112,8 @@ @property({type: String}) _repo: string | null = null; + private restApiService = appContext.restApiService; + /** @override */ created() { super.created(); @@ -146,7 +147,7 @@ // in an async so that attachment to the DOM can take place first. this.async(() => fireTitleChange(this, this._query)); - this.$.restAPI + this.restApiService .getPreferences() .then(prefs => { if (!prefs) { @@ -183,9 +184,9 @@ } _loadPreferences() { - return this.$.restAPI.getLoggedIn().then(loggedIn => { + return this.restApiService.getLoggedIn().then(loggedIn => { if (loggedIn) { - this.$.restAPI.getPreferences().then(preferences => { + this.restApiService.getPreferences().then(preferences => { this.preferences = preferences; }); } else { @@ -195,7 +196,7 @@ } _getChanges() { - return this.$.restAPI.getChanges( + return this.restApiService.getChanges( this._changesPerPage, this._query, this._offset @@ -282,11 +283,14 @@ } _handleToggleStar(e: CustomEvent<ChangeStarToggleStarDetail>) { - this.$.restAPI.saveChangeStarred(e.detail.change._number, e.detail.starred); + this.restApiService.saveChangeStarred( + e.detail.change._number, + e.detail.starred + ); } _handleToggleReviewed(e: CustomEvent<ChangeListToggleReviewedDetail>) { - this.$.restAPI.saveChangeReviewed( + this.restApiService.saveChangeReviewed( e.detail.change._number, e.detail.reviewed );
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_html.ts b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_html.ts index 0e8f843..9914e70 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_html.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list-view/gr-change-list-view_html.ts
@@ -98,5 +98,4 @@ </a> </nav> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts index 3acdaf9..3639657 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list.ts
@@ -43,7 +43,6 @@ import {getPluginLoader} from '../../shared/gr-js-api-interface/gr-plugin-loader'; import {changeIsOpen, isOwner} from '../../../utils/change-util'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrCursorManager} from '../../shared/gr-cursor-manager/gr-cursor-manager'; import { AccountInfo, @@ -69,7 +68,6 @@ } export interface GrChangeList { $: { - restAPI: RestApiService & Element; cursor: GrCursorManager; }; } @@ -147,6 +145,8 @@ flagsService = appContext.flagsService; + private restApiService = appContext.restApiService; + keyboardShortcuts() { return { [Shortcut.CURSOR_NEXT_CHANGE]: '_nextChange', @@ -169,7 +169,7 @@ /** @override */ ready() { super.ready(); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._config = config; }); }
diff --git a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_html.ts b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_html.ts index 06957d9..990525c 100644 --- a/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_html.ts +++ b/polygerrit-ui/app/elements/change-list/gr-change-list/gr-change-list_html.ts
@@ -163,5 +163,4 @@ scroll-mode="keep-visible" focus-on-move="" ></gr-cursor-manager> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts index 0cf9357..5fc831a 100644 --- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts +++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view.ts
@@ -47,7 +47,6 @@ RepoName, } from '../../../types/common'; import {AppElementDashboardParams, AppElementParams} from '../../gr-app-types'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrDialog} from '../../shared/gr-dialog/gr-dialog'; import {GrCreateCommandsDialog} from '../gr-create-commands-dialog/gr-create-commands-dialog'; import { @@ -64,7 +63,6 @@ export interface GrDashboardView { $: { - restAPI: RestApiService & Element; confirmDeleteDialog: GrDialog; commandsDialog: GrCreateCommandsDialog; destinationDialog: GrCreateDestinationDialog; @@ -120,6 +118,8 @@ private reporting = appContext.reportingService; + private restApiService = appContext.restApiService; + constructor() { super(); } @@ -135,9 +135,9 @@ } _loadPreferences() { - return this.$.restAPI.getLoggedIn().then(loggedIn => { + return this.restApiService.getLoggedIn().then(loggedIn => { if (loggedIn) { - this.$.restAPI.getPreferences().then(preferences => { + this.restApiService.getPreferences().then(preferences => { this.preferences = preferences; }); } else { @@ -153,7 +153,7 @@ const errFn = (response?: Response | null) => { firePageError(this, response); }; - return this.$.restAPI + return this.restApiService .getDashboard(project, dashboard, errFn) .then(response => { if (!response) { @@ -206,7 +206,7 @@ const {project, dashboard, title, user, sections} = params; const dashboardPromise: Promise<UserDashboard | undefined> = project ? this._getProjectDashboard(project, dashboard) - : this.$.restAPI + : this.restApiService .getConfig() .then(config => Promise.resolve( @@ -272,7 +272,7 @@ } } - return this.$.restAPI.getChanges(undefined, queries).then(changes => { + return this.restApiService.getChanges(undefined, queries).then(changes => { if (!changes) { throw new Error('getChanges returns undefined'); } @@ -351,11 +351,14 @@ } _handleToggleStar(e: CustomEvent<ChangeStarToggleStarDetail>) { - this.$.restAPI.saveChangeStarred(e.detail.change._number, e.detail.starred); + this.restApiService.saveChangeStarred( + e.detail.change._number, + e.detail.starred + ); } _handleToggleReviewed(e: CustomEvent<ChangeListToggleReviewedDetail>) { - this.$.restAPI.saveChangeReviewed( + this.restApiService.saveChangeReviewed( e.detail.change._number, e.detail.reviewed ); @@ -402,7 +405,7 @@ _handleConfirmDelete() { this.$.confirmDeleteDialog.disabled = true; - return this.$.restAPI.deleteDraftComments('-is:open').then(() => { + return this.restApiService.deleteDraftComments('-is:open').then(() => { this._closeConfirmDeleteOverlay(); this._reload(this.params); });
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_html.ts b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_html.ts index 6dae176..c23a1cc 100644 --- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_html.ts +++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_html.ts
@@ -125,5 +125,4 @@ on-confirm="_handleDestinationConfirm" ></gr-create-destination-dialog> <gr-create-commands-dialog id="commandsDialog"></gr-create-commands-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js index f788e74..1fa24ba 100644 --- a/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js +++ b/polygerrit-ui/app/elements/change-list/gr-dashboard-view/gr-dashboard-view_test.js
@@ -39,7 +39,7 @@ }); element = basicFixture.instantiate(); - getChangesStub = sinon.stub(element.$.restAPI, 'getChanges').callsFake( + getChangesStub = sinon.stub(element.restApiService, 'getChanges').callsFake( (_, qs) => Promise.resolve(qs.map(() => []))); let resolver; @@ -124,14 +124,14 @@ const deleteDraftCommentsPromise = new Promise(resolve => { deleteDraftCommentsPromiseResolver = resolve; }); - sinon.stub(element.$.restAPI, 'deleteDraftComments') + sinon.stub(element.restApiService, 'deleteDraftComments') .returns(deleteDraftCommentsPromise); // Open confirmation dialog and tap confirm button. await element.$.confirmDeleteOverlay.open(); MockInteractions.tap(element.$.confirmDeleteDialog.$.confirm); flush(); - assert.isTrue(element.$.restAPI.deleteDraftComments + assert.isTrue(element.restApiService.deleteDraftComments .calledWithExactly('-is:open')); assert.isTrue(element.$.confirmDeleteDialog.disabled); assert.equal(element._reload.callCount, 0); @@ -254,7 +254,7 @@ suite('_getProjectDashboard', () => { test('dashboard with foreach', () => { - sinon.stub(element.$.restAPI, 'getDashboard') + sinon.stub(element.restApiService, 'getDashboard') .callsFake( () => Promise.resolve({ title: 'title', foreach: 'foreach for ${project}', @@ -280,7 +280,7 @@ }); test('dashboard without foreach', () => { - sinon.stub(element.$.restAPI, 'getDashboard').callsFake( + sinon.stub(element.restApiService, 'getDashboard').callsFake( () => Promise.resolve({ title: 'title', sections: [ @@ -308,7 +308,7 @@ {name: 'test2', query: 'test2', hideIfEmpty: true}, ]; getChangesStub.restore(); - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([[], ['nonempty']])); return element._fetchDashboardChanges({sections}, false).then(() => { @@ -323,7 +323,7 @@ {name: 'test2', query: 'test2'}, ]; getChangesStub.restore(); - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([[], []])); return element._fetchDashboardChanges({sections}, false).then(() => { @@ -374,7 +374,7 @@ test('404 page', done => { const response = {status: 404}; - sinon.stub(element.$.restAPI, 'getDashboard').callsFake( + sinon.stub(element.restApiService, 'getDashboard').callsFake( async (project, dashboard, errFn) => { errFn(response); });
diff --git a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_html.ts b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_html.ts index d1221d15..2dd2913 100644 --- a/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_html.ts +++ b/polygerrit-ui/app/elements/change-list/gr-repo-header/gr-repo-header_html.ts
@@ -30,5 +30,4 @@ <hr /> <div><span>Detail:</span> <a href$="[[_repoUrl]]">Repo settings</a></div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.ts b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.ts index 055c82c..b4a1466 100644 --- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.ts +++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header.ts
@@ -28,15 +28,9 @@ import {htmlTemplate} from './gr-user-header_html'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {AccountDetailInfo, AccountId} from '../../../types/common'; import {getDisplayName} from '../../../utils/display-name-util'; - -export interface GrUserHeader { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; @customElement('gr-user-header') export class GrUserHeader extends GestureEventListeners( @@ -61,6 +55,8 @@ @property({type: String}) _status = ''; + private restApiService = appContext.restApiService; + _accountChanged(userId?: AccountId) { if (!userId) { this._accountDetails = null; @@ -68,7 +64,7 @@ return; } - this.$.restAPI.getAccountDetails(userId).then(details => { + this.restApiService.getAccountDetails(userId).then(details => { this._accountDetails = details ?? null; this._status = details?.status ?? ''; });
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_html.ts b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_html.ts index 002a4ba..a8a6a56 100644 --- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_html.ts +++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_html.ts
@@ -66,5 +66,4 @@ <a href$="[[_computeDashboardUrl(_accountDetails)]]">View dashboard</a> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.js b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.js index a808f3c..78560907 100644 --- a/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.js +++ b/polygerrit-ui/app/elements/change-list/gr-user-header/gr-user-header_test.js
@@ -28,7 +28,7 @@ }); test('loads and clears account info', done => { - sinon.stub(element.$.restAPI, 'getAccountDetails') + sinon.stub(element.restApiService, 'getAccountDetails') .returns(Promise.resolve({ name: 'foo', email: 'bar',
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts index 9473700..020762c 100644 --- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts +++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions.ts
@@ -65,7 +65,6 @@ ActionPriority, ActionType, ErrorCallback, - RestApiService, } from '../../../services/services/gr-rest-api/gr-rest-api'; import { ActionInfo, @@ -323,7 +322,6 @@ export interface GrChangeActions { $: { jsAPI: GrJsApiInterface; - restAPI: RestApiService & Element; mainContent: Element; overlay: GrOverlay; confirmRebase: GrConfirmRebaseDialog; @@ -549,6 +547,8 @@ @property({type: Object}) _config?: ServerInfo; + private restApiService = appContext.restApiService; + /** @override */ created() { super.created(); @@ -564,7 +564,7 @@ ready() { super.ready(); this.$.jsAPI.addElement(TargetElement.CHANGE_ACTIONS, this); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._config = config; }); this._handleLoadingComplete(); @@ -600,7 +600,7 @@ const change = this.change; this._loading = true; - return this.$.restAPI + return this.restApiService .getChangeRevisionActions(this.changeNum, this.latestPatchNum) .then(revisionActions => { if (!revisionActions) { @@ -1086,7 +1086,7 @@ if (!this.changeNum) { return; } - this.$.restAPI + this.restApiService .getChangeActionURL(this.changeNum, patchNum, '/' + action.__key) .then(url => (action.__url = url)); } @@ -1148,7 +1148,7 @@ /* A chromium plugin expects that the modifyRevertMsg hook will only be called after the revert button is pressed, hence we populate the revert dialog after revert button is pressed. */ - this.$.restAPI.getChanges(0, query).then(changes => { + this.restApiService.getChanges(0, query).then(changes => { if (!changes) { console.error('changes is undefined'); return; @@ -1162,7 +1162,7 @@ const change = this.change; if (!change) return; const query = `submissionid:${change.submission_id}`; - this.$.restAPI.getChanges(0, query).then(changes => { + this.restApiService.getChanges(0, query).then(changes => { if (!changes) { console.error('changes is undefined'); return; @@ -1594,14 +1594,14 @@ if (!labels) { return Promise.resolve(undefined); } - return this.$.restAPI.saveChangeReview(newChangeId, CURRENT, {labels}); + return this.restApiService.saveChangeReview(newChangeId, CURRENT, {labels}); } _handleResponse(action: UIActionInfo, response?: Response) { if (!response) { return; } - return this.$.restAPI.getResponseObject(response).then(obj => { + return this.restApiService.getResponseObject(response).then(obj => { switch (action.__key) { case ChangeActions.REVERT: { const revertChangeInfo: ChangeInfo = (obj as unknown) as ChangeInfo; @@ -1729,7 +1729,7 @@ new Error('Properties change and changeNum must be set.') ); } - return fetchChangeUpdates(change, this.$.restAPI).then(result => { + return fetchChangeUpdates(change, this.restApiService).then(result => { if (!result.isLatest) { this.dispatchEvent( new CustomEvent('show-alert', { @@ -1760,7 +1760,7 @@ return Promise.resolve(undefined); } const patchNum = revisionAction ? this.latestPatchNum : undefined; - return this.$.restAPI + return this.restApiService .executeChangeAction( changeNum, method, @@ -1790,14 +1790,16 @@ ListChangesOption.MESSAGES, ListChangesOption.ALL_REVISIONS ); - this.$.restAPI.getChanges(0, query, undefined, options).then(changes => { - if (!changes) { - console.error('getChanges returns undefined'); - return; - } - this.$.confirmCherrypick.updateChanges(changes); - this._showActionDialog(this.$.confirmCherrypick); - }); + this.restApiService + .getChanges(0, query, undefined, options) + .then(changes => { + if (!changes) { + console.error('getChanges returns undefined'); + return; + } + this.$.confirmCherrypick.updateChanges(changes); + this._showActionDialog(this.$.confirmCherrypick); + }); } _handleMoveTap() { @@ -2052,7 +2054,7 @@ const check = () => { attempsRemaining--; // Pass a no-op error handler to avoid the "not found" error toast. - this.$.restAPI + this.restApiService .getChange(changeNum, () => {}) .then(response => { // If the response is 404, the response will be undefined.
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_html.ts b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_html.ts index 4e315af..0a3e536 100644 --- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_html.ts +++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_html.ts
@@ -270,5 +270,4 @@ </gr-dialog> </gr-overlay> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.js b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.js index 1098760..3b6a2bf 100644 --- a/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.js +++ b/polygerrit-ui/app/elements/change/gr-change-actions/gr-change-actions_test.js
@@ -25,6 +25,7 @@ createChangeMessages, createRevisions, } from '../../../test/test-data-generators.js'; +import {appContext} from '../../../services/app-context.js'; const basicFixture = fixtureFromElement('gr-change-actions'); @@ -104,10 +105,8 @@ enabled: true, }, }; - sinon.stub(element.$.confirmCherrypick.$.restAPI, - 'getRepoBranches').returns(Promise.resolve([])); - sinon.stub(element.$.confirmMove.$.restAPI, - 'getRepoBranches').returns(Promise.resolve([])); + sinon.stub(appContext.restApiService, 'getRepoBranches').returns( + Promise.resolve([])); return element.reload(); }); @@ -143,14 +142,14 @@ }); test('plugin revision actions', done => { - sinon.stub(element.$.restAPI, 'getChangeActionURL').returns( + sinon.stub(element.restApiService, 'getChangeActionURL').returns( Promise.resolve('the-url')); element.revisionActions = { 'plugin~action': {}, }; assert.isOk(element.revisionActions['plugin~action']); flush(() => { - assert.isTrue(element.$.restAPI.getChangeActionURL.calledWith( + assert.isTrue(element.restApiService.getChangeActionURL.calledWith( element.changeNum, element.latestPatchNum, '/plugin~action')); assert.equal(element.revisionActions['plugin~action'].__url, 'the-url'); done(); @@ -158,14 +157,14 @@ }); test('plugin change actions', async () => { - sinon.stub(element.$.restAPI, 'getChangeActionURL').returns( + sinon.stub(element.restApiService, 'getChangeActionURL').returns( Promise.resolve('the-url')); element.actions = { 'plugin~action': {}, }; assert.isOk(element.actions['plugin~action']); await flush(); - assert.isTrue(element.$.restAPI.getChangeActionURL.calledWith( + assert.isTrue(element.restApiService.getChangeActionURL.calledWith( element.changeNum, undefined, '/plugin~action')); assert.equal(element.actions['plugin~action'].__url, 'the-url'); }); @@ -273,7 +272,7 @@ test('submit change', () => { const showSpy = sinon.spy(element, '_showActionDialog'); - sinon.stub(element.$.restAPI, 'getFromProjectLookup') + sinon.stub(element.restApiService, 'getFromProjectLookup') .returns(Promise.resolve('test')); sinon.stub(element.$.overlay, 'open').returns(Promise.resolve()); element.change = { @@ -295,7 +294,7 @@ test('submit change, tap on icon', done => { sinon.stub(element.$.confirmSubmitDialog, 'resetFocus').callsFake( done); - sinon.stub(element.$.restAPI, 'getFromProjectLookup') + sinon.stub(element.restApiService, 'getFromProjectLookup') .returns(Promise.resolve('test')); sinon.stub(element.$.overlay, 'open').returns(Promise.resolve()); element.change = { @@ -399,7 +398,7 @@ test('rebase change fires reload event', done => { const eventStub = sinon.stub(element, 'dispatchEvent'); - sinon.stub(element.$.restAPI, 'getResponseObject').returns( + sinon.stub(element.restApiService, 'getResponseObject').returns( Promise.resolve({})); element._handleResponse({__key: 'rebase'}, {}); flush(() => { @@ -429,24 +428,21 @@ }); }); - test('two dialogs are not shown at the same time', done => { + test('two dialogs are not shown at the same time', async () => { element._hasKnownChainState = true; - flush(() => { - const rebaseButton = element.shadowRoot - .querySelector('gr-button[data-action-key="rebase"]'); - assert.ok(rebaseButton); - MockInteractions.tap(rebaseButton); - flush(); - assert.isFalse(element.$.confirmRebase.hidden); - sinon.stub(element.$.restAPI, 'getChanges') - .returns(Promise.resolve([])); - element._handleCherrypickTap(); - flush(() => { - assert.isTrue(element.$.confirmRebase.hidden); - assert.isFalse(element.$.confirmCherrypick.hidden); - done(); - }); - }); + await flush(); + const rebaseButton = element.shadowRoot + .querySelector('gr-button[data-action-key="rebase"]'); + assert.ok(rebaseButton); + MockInteractions.tap(rebaseButton); + await flush(); + assert.isFalse(element.$.confirmRebase.hidden); + sinon.stub(element.restApiService, 'getChanges') + .returns(Promise.resolve([])); + element._handleCherrypickTap(); + await flush(); + assert.isTrue(element.$.confirmRebase.hidden); + assert.isFalse(element.$.confirmCherrypick.hidden); }); test('fullscreen-overlay-opened hides content', () => { @@ -473,7 +469,7 @@ const labels = {'Foo': 1, 'Bar-Baz': -2}; const changeId = 1234; sinon.stub(element.$.jsAPI, 'getLabelValuesPostRevert').returns(labels); - const saveStub = sinon.stub(element.$.restAPI, 'saveChangeReview') + const saveStub = sinon.stub(element.restApiService, 'saveChangeReview') .returns(Promise.resolve()); return element._setLabelValuesOnRevert(changeId).then(() => { assert.isTrue(saveStub.calledOnce); @@ -748,7 +744,7 @@ }, ]; setup(done => { - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve(changes)); element._handleCherrypickTap(); flush(() => { @@ -994,7 +990,7 @@ element.change = { current_revision: 'abc1234', }; - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([ {change_id: '12345678901234', topic: 'T', subject: 'random'}, {change_id: '23456', topic: 'T', subject: 'a'.repeat(100)}, @@ -1019,7 +1015,7 @@ submission_id: '199 0', current_revision: '2000', }; - getChangesStub = sinon.stub(element.$.restAPI, 'getChanges') + getChangesStub = sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([ {change_id: '12345678901234', topic: 'T', subject: 'random'}, {change_id: '23456', topic: 'T', subject: 'a'.repeat(100)}, @@ -1129,7 +1125,7 @@ submission_id: '199', current_revision: '2000', }; - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([ {change_id: '12345678901234', topic: 'T', subject: 'random'}, ])); @@ -1810,7 +1806,7 @@ }; test('succeed', () => { - sinon.stub(element.$.restAPI, 'getChange') + sinon.stub(element.restApiService, 'getChange') .callsFake( makeGetChange(5)); return element._waitForChangeReachable(123).then(success => { assert.isTrue(success); @@ -1818,7 +1814,7 @@ }); test('fail', () => { - sinon.stub(element.$.restAPI, 'getChange') + sinon.stub(element.restApiService, 'getChange') .callsFake( makeGetChange(6)); return element._waitForChangeReachable(123).then(success => { assert.isFalse(success); @@ -1855,16 +1851,16 @@ suite('happy path', () => { let sendStub; setup(() => { - sinon.stub(element.$.restAPI, 'getChangeDetail') + sinon.stub(element.restApiService, 'getChangeDetail') .returns(Promise.resolve({ ...createChange(), // element has latest info revisions: createRevisions(element.latestPatchNum), messages: createChangeMessages(1), })); - sendStub = sinon.stub(element.$.restAPI, 'executeChangeAction') + sendStub = sinon.stub(element.restApiService, 'executeChangeAction') .returns(Promise.resolve({})); - getResponseObjectStub = sinon.stub(element.$.restAPI, + getResponseObjectStub = sinon.stub(element.restApiService, 'getResponseObject'); sinon.stub(GerritNav, 'navigateToChange').returns(Promise.resolve(true)); @@ -1882,7 +1878,7 @@ setup(() => { element.change.submission_id = '199'; element.change.current_revision = '2000'; - sinon.stub(element.$.restAPI, 'getChanges') + sinon.stub(element.restApiService, 'getChanges') .returns(Promise.resolve([ {change_id: '12345678901234', topic: 'T', subject: 'random'}, {change_id: '23456', topic: 'T', subject: 'a'.repeat(100)}, @@ -1974,14 +1970,14 @@ suite('failure modes', () => { test('non-latest', () => { - sinon.stub(element.$.restAPI, 'getChangeDetail') + sinon.stub(element.restApiService, 'getChangeDetail') .returns(Promise.resolve({ ...createChange(), // new patchset was uploaded revisions: createRevisions(element.latestPatchNum + 1), messages: createChangeMessages(1), })); - const sendStub = sinon.stub(element.$.restAPI, + const sendStub = sinon.stub(element.restApiService, 'executeChangeAction'); return element._send('DELETE', payload, '/endpoint', true, cleanup) @@ -1994,14 +1990,14 @@ }); test('send fails', () => { - sinon.stub(element.$.restAPI, 'getChangeDetail') + sinon.stub(element.restApiService, 'getChangeDetail') .returns(Promise.resolve({ ...createChange(), // element has latest info revisions: createRevisions(element.latestPatchNum), messages: createChangeMessages(1), })); - const sendStub = sinon.stub(element.$.restAPI, + const sendStub = sinon.stub(element.restApiService, 'executeChangeAction').callsFake( (num, method, patchNum, endpoint, payload, onErr) => { onErr(); @@ -2062,10 +2058,8 @@ element.changeNum = '42'; element.latestPatchNum = '2'; - sinon.stub(element.$.confirmCherrypick.$.restAPI, - 'getRepoBranches').returns(Promise.resolve([])); - sinon.stub(element.$.confirmMove.$.restAPI, - 'getRepoBranches').returns(Promise.resolve([])); + sinon.stub(appContext.restApiService, 'getRepoBranches').returns( + Promise.resolve([])); return element.reload(); });
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.ts b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.ts index 9910fb6..d67cc73 100644 --- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.ts +++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata.ts
@@ -73,7 +73,6 @@ TopicName, } from '../../../types/common'; import {assertNever} from '../../../utils/common-util'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrEditableLabel} from '../../shared/gr-editable-label/gr-editable-label'; import {GrLinkedChip} from '../../shared/gr-linked-chip/gr-linked-chip'; import {appContext} from '../../../services/app-context'; @@ -117,7 +116,6 @@ export interface GrChangeMetadata { $: { - restAPI: RestApiService & Element; webLinks: HTMLElement; }; } @@ -213,6 +211,8 @@ flagsService = appContext.flagsService; + restApiService = appContext.restApiService; + /** @override */ ready() { super.ready(); @@ -250,13 +250,13 @@ return; } this.set(['change', 'assignee'], acct); - this.$.restAPI.setAssignee(this.change._number, acct._account_id); + this.restApiService.setAssignee(this.change._number, acct._account_id); } else { if (!this.change.assignee) { return; } this.set(['change', 'assignee'], undefined); - this.$.restAPI.deleteAssignee(this.change._number); + this.restApiService.deleteAssignee(this.change._number); } } @@ -309,7 +309,7 @@ const topic = e.detail.length ? e.detail : undefined; this._settingTopic = true; const topicChangedForChangeNumber = this.change._number; - this.$.restAPI + this.restApiService .setChangeTopic(topicChangedForChangeNumber, topic) .then(newTopic => { if (this.change?._number !== topicChangedForChangeNumber) return; @@ -357,7 +357,7 @@ } const newHashtag = this._newHashtag; this._newHashtag = '' as Hashtag; - this.$.restAPI + this.restApiService .setChangeHashtag(this.change._number, {add: [newHashtag]}) .then(newHashtag => { this.set(['change', 'hashtags'], newHashtag); @@ -512,7 +512,7 @@ } const target = (dom(e) as EventApi).rootTarget as GrLinkedChip; target.disabled = true; - this.$.restAPI + this.restApiService .setChangeTopic(this.change._number) .then(() => { target.disabled = false; @@ -533,7 +533,7 @@ } const target = (dom(e) as EventApi).rootTarget as GrLinkedChip; target.disabled = true; - this.$.restAPI + this.restApiService .setChangeHashtag(this.change._number, {remove: [target.text as Hashtag]}) .then(newHashtags => { target.disabled = false; @@ -677,7 +677,7 @@ return undefined; } const provider = GrReviewerSuggestionsProvider.create( - this.$.restAPI, + this.restApiService, change._number, SUGGESTIONS_PROVIDERS_USERS_TYPES.ANY );
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts index 16b2582..a2f72b7 100644 --- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts +++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_html.ts
@@ -432,5 +432,4 @@ ></gr-endpoint-param> </gr-endpoint-decorator> </gr-external-style> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.ts b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.ts index e95e3ba..3ee3470 100644 --- a/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.ts +++ b/polygerrit-ui/app/elements/change/gr-change-metadata/gr-change-metadata_test.ts
@@ -839,8 +839,8 @@ let setStub: SinonStubbedMember<RestApiService['setAssignee']>; setup(() => { - deleteStub = sinon.stub(element.$.restAPI, 'deleteAssignee'); - setStub = sinon.stub(element.$.restAPI, 'setAssignee'); + deleteStub = sinon.stub(element.restApiService, 'deleteAssignee'); + setStub = sinon.stub(element.restApiService, 'setAssignee'); element.serverConfig = { ...createServerInfo(), change: { @@ -887,7 +887,7 @@ test('changing topic', () => { const newTopic = 'the new topic' as TopicName; const setChangeTopicStub = sinon - .stub(element.$.restAPI, 'setChangeTopic') + .stub(element.restApiService, 'setChangeTopic') .returns(Promise.resolve(newTopic)); element._handleTopicChanged(new CustomEvent('test', {detail: newTopic})); const topicChangedSpy = sinon.spy(); @@ -904,7 +904,7 @@ test('topic removal', () => { const newTopic = 'the new topic' as TopicName; const setChangeTopicStub = sinon - .stub(element.$.restAPI, 'setChangeTopic') + .stub(element.restApiService, 'setChangeTopic') .returns(Promise.resolve(newTopic)); const chip = element.shadowRoot!.querySelector('gr-linked-chip'); const remove = chip!.$.remove; @@ -925,7 +925,7 @@ element._newHashtag = 'new hashtag' as Hashtag; const newHashtag: Hashtag[] = ['new hashtag' as Hashtag]; const setChangeHashtagStub = sinon - .stub(element.$.restAPI, 'setChangeHashtag') + .stub(element.restApiService, 'setChangeHashtag') .returns(Promise.resolve(newHashtag)); element._handleHashtagChanged(); assert.isTrue(
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 24841fc..1731874 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
@@ -76,7 +76,6 @@ import {changeStatuses, changeStatusString} from '../../../utils/change-util'; import {EventType as PluginEventType} from '../../plugins/gr-plugin-types'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrJsApiInterface} from '../../shared/gr-js-api-interface/gr-js-api-interface-element'; import {GrApplyFixDialog} from '../../diff/gr-apply-fix-dialog/gr-apply-fix-dialog'; import {GrFileListHeader} from '../gr-file-list-header/gr-file-list-header'; @@ -205,7 +204,6 @@ export interface GrChangeView { $: { - restAPI: RestApiService & Element; jsAPI: GrJsApiInterface; commentAPI: GrCommentApi; applyFixDialog: GrApplyFixDialog; @@ -538,6 +536,8 @@ _isChecksEnabled = false; + restApiService = appContext.restApiService; + keyboardShortcuts() { return { [Shortcut.SEND_REPLY]: null, // DOC_ONLY binding @@ -615,7 +615,7 @@ this._getLoggedIn().then(loggedIn => { this._loggedIn = loggedIn; if (loggedIn) { - this.$.restAPI.getAccount().then(acct => { + this.restApiService.getAccount().then(acct => { this._account = acct; }); } @@ -847,7 +847,7 @@ this.$.jsAPI.handleCommitMessage(this._change, message); this.$.commitMessageEditor.disabled = true; - this.$.restAPI + this.restApiService .putChangeCommitMessage(this._changeNum, message) .then(resp => { this.$.commitMessageEditor.disabled = false; @@ -1242,7 +1242,7 @@ } if (value.changeNum && value.project) { - this.$.restAPI.setInProjectLookup(value.changeNum, value.project); + this.restApiService.setInProjectLookup(value.changeNum, value.project); } const patchChanged = @@ -1861,16 +1861,16 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _getServerConfig() { - return this.$.restAPI.getConfig(); + return this.restApiService.getConfig(); } _getProjectConfig() { if (!this._change) throw new Error('missing required change property'); - return this.$.restAPI + return this.restApiService .getProjectConfig(this._change.project) .then(config => { this._projectConfig = config; @@ -1878,7 +1878,7 @@ } _getPreferences() { - return this.$.restAPI.getPreferences(); + return this.restApiService.getPreferences(); } _prepareCommitMsgForLinkify(msg: string) { @@ -1928,8 +1928,9 @@ _getChangeDetail() { if (!this._changeNum) throw new Error('missing required changeNum property'); - const detailCompletes = this.$.restAPI.getChangeDetail(this._changeNum, r => - this._handleGetChangeDetailError(r) + const detailCompletes = this.restApiService.getChangeDetail( + this._changeNum, + r => this._handleGetChangeDetailError(r) ); const editCompletes = this._getEdit(); const prefCompletes = this._getPreferences(); @@ -2018,7 +2019,7 @@ _getEdit() { if (!this._changeNum) return Promise.reject(new Error('missing required changeNum property')); - return this.$.restAPI.getChangeEdit(this._changeNum, true); + return this.restApiService.getChangeEdit(this._changeNum, true); } _getLatestCommitMessage() { @@ -2027,7 +2028,7 @@ const lastpatchNum = computeLatestPatchNum(this._allPatchSets); if (lastpatchNum === undefined) throw new Error('missing lastPatchNum property'); - return this.$.restAPI + return this.restApiService .getChangeCommitInfo(this._changeNum, lastpatchNum) .then(commitInfo => { if (!commitInfo) return; @@ -2065,7 +2066,7 @@ throw new Error('missing required _patchRange property'); if (this._patchRange.patchNum === undefined) throw new Error('missing required patchNum property'); - return this.$.restAPI + return this.restApiService .getChangeCommitInfo(this._changeNum, this._patchRange.patchNum) .then(commitInfo => { this._commitInfo = commitInfo; @@ -2303,11 +2304,13 @@ } this._mergeable = null; - return this.$.restAPI.getMergeable(this._changeNum).then(mergableInfo => { - if (mergableInfo) { - this._mergeable = mergableInfo.mergeable; - } - }); + return this.restApiService + .getMergeable(this._changeNum) + .then(mergableInfo => { + if (mergableInfo) { + this._mergeable = mergableInfo.mergeable; + } + }); } _computeCanStartReview(change: ChangeInfo) { @@ -2490,7 +2493,7 @@ this._updateCheckTimerHandle = this.async(() => { if (!this._change) throw new Error('missing required change property'); const change = this._change; - fetchChangeUpdates(change, this.$.restAPI).then(result => { + fetchChangeUpdates(change, this.restApiService).then(result => { let toastMessage = null; if (!result.isLatest) { toastMessage = ReloadToastMessage.NEWER_REVISION; @@ -2689,7 +2692,10 @@ } _handleToggleStar(e: CustomEvent<{change: ChangeInfo; starred: boolean}>) { - this.$.restAPI.saveChangeStarred(e.detail.change._number, e.detail.starred); + this.restApiService.saveChangeStarred( + e.detail.change._number, + e.detail.starred + ); } _getRevisionInfo(change: ChangeInfo | ParsedChangeInfo) {
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 fbf01dc..c4b701f 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
@@ -793,6 +793,5 @@ </gr-reply-dialog> </gr-overlay> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-comment-api id="commentAPI"></gr-comment-api> `;
diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts index 6262300..c896a99 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view_test.ts
@@ -704,7 +704,7 @@ messages: createChangeMessages(1), }; element._change.labels = {}; - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // element has latest info @@ -1474,7 +1474,7 @@ test('diffMode defaults to side by side without preferences', done => { sinon - .stub(element.$.restAPI, 'getPreferences') + .stub(element.restApiService, 'getPreferences') .returns(Promise.resolve(createPreferences())); // No user prefs or diff view mode set. @@ -1485,7 +1485,7 @@ }); test('diffMode defaults to preference when not already set', done => { - sinon.stub(element.$.restAPI, 'getPreferences').returns( + sinon.stub(element.restApiService, 'getPreferences').returns( Promise.resolve({ ...createPreferences(), default_diff_view: DiffViewMode.UNIFIED, @@ -1500,7 +1500,7 @@ test('existing diffMode overrides preference', done => { element.viewState.diffMode = DiffViewMode.SIDE_BY_SIDE; - sinon.stub(element.$.restAPI, 'getPreferences').returns( + sinon.stub(element.restApiService, 'getPreferences').returns( Promise.resolve({ ...createPreferences(), default_diff_view: DiffViewMode.UNIFIED, @@ -1647,7 +1647,7 @@ element._change = createChange(); // Response code is 500, because we want to avoid window reloading const putStub = sinon - .stub(element.$.restAPI, 'putChangeCommitMessage') + .stub(element.restApiService, 'putChangeCommitMessage') .returns(Promise.resolve(new Response(null, {status: 500}))); const mockEvent = (content: string) => { @@ -1764,7 +1764,7 @@ test('topic is coalesced to null', done => { sinon.stub(element, '_changeChanged'); - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), labels: {}, @@ -1781,7 +1781,7 @@ test('commit sha is populated from getChangeDetail', done => { sinon.stub(element, '_changeChanged'); - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), labels: {}, @@ -1799,7 +1799,7 @@ test('edit is added to change', () => { sinon.stub(element, '_changeChanged'); const changeRevision = createRevision(); - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), labels: {}, @@ -1957,7 +1957,7 @@ test('revert dialog opened with revert param', done => { sinon - .stub(element.$.restAPI, 'getLoggedIn') + .stub(element.restApiService, 'getLoggedIn') .callsFake(() => Promise.resolve(true)); const awaitPluginsLoadedStub = sinon .stub(getPluginLoader(), 'awaitPluginsLoaded') @@ -2034,7 +2034,7 @@ messages: createChangeMessages(1), }; element._change.labels = {}; - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // element has latest info @@ -2126,7 +2126,7 @@ messages: createChangeMessages(1), }; element._change.labels = {}; - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // new patchset was uploaded @@ -2306,7 +2306,7 @@ test('_startUpdateCheckTimer negative delay', () => { const getChangeDetailStub = sinon - .stub(element.$.restAPI, 'getChangeDetail') + .stub(element.restApiService, 'getChangeDetail') .callsFake(() => Promise.resolve({ ...createChange(), @@ -2328,7 +2328,7 @@ test('_startUpdateCheckTimer up-to-date', async () => { const getChangeDetailStub = sinon - .stub(element.$.restAPI, 'getChangeDetail') + .stub(element.restApiService, 'getChangeDetail') .callsFake(() => Promise.resolve({ ...createChange(), @@ -2351,7 +2351,7 @@ }); test('_startUpdateCheckTimer out-of-date shows an alert', done => { - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // new patchset was uploaded @@ -2374,7 +2374,7 @@ }); test('_startUpdateCheckTimer respects _loading', async () => { - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // new patchset was uploaded @@ -2396,7 +2396,7 @@ }); test('_startUpdateCheckTimer new status shows an alert', done => { - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), // element has latest info @@ -2418,7 +2418,7 @@ }); test('_startUpdateCheckTimer new messages shows an alert', done => { - sinon.stub(element.$.restAPI, 'getChangeDetail').callsFake(() => + sinon.stub(element.restApiService, 'getChangeDetail').callsFake(() => Promise.resolve({ ...createChange(), revisions: {rev1: createRevision()}, @@ -2660,7 +2660,7 @@ test('_selectedRevision updates when patchNum is changed', () => { const revision1: RevisionInfo = createRevision(1); const revision2: RevisionInfo = createRevision(2); - sinon.stub(element.$.restAPI, 'getChangeDetail').returns( + sinon.stub(element.restApiService, 'getChangeDetail').returns( Promise.resolve({ ...createChange(), revisions: { @@ -2689,7 +2689,7 @@ const revision1 = createRevision(1); const revision2 = createRevision(2); const revision3 = createEditRevision(); - sinon.stub(element.$.restAPI, 'getChangeDetail').returns( + sinon.stub(element.restApiService, 'getChangeDetail').returns( Promise.resolve({ ...createChange(), revisions: { @@ -2839,7 +2839,7 @@ setup(() => { element._change = {...createChange(), labels: {}}; getMergeableStub = sinon - .stub(element.$.restAPI, 'getMergeable') + .stub(element.restApiService, 'getMergeable') .returns(Promise.resolve({...createMergeable(), mergeable: true})); }); @@ -2873,7 +2873,7 @@ test('_paramsChanged sets in projectLookup', () => { sinon.stub(element.$.relatedChanges, 'reload'); sinon.stub(element, '_reload').returns(Promise.resolve([])); - const setStub = sinon.stub(element.$.restAPI, 'setInProjectLookup'); + const setStub = sinon.stub(element.restApiService, 'setInProjectLookup'); element._paramsChanged({ view: GerritNav.View.CHANGE, changeNum: 101 as NumericChangeId,
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts index e05bac0..6a4d5b1 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog.ts
@@ -35,7 +35,6 @@ } from '../../../types/common'; import {ReportingService} from '../../../services/gr-reporting/gr-reporting'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { GrAutocomplete, AutocompleteSuggestion, @@ -68,7 +67,6 @@ // is converted export interface GrConfirmCherrypickDialog { $: { - restAPI: RestApiService & Element; branchInput: GrAutocomplete; }; } @@ -142,6 +140,8 @@ @property({type: Object}) reporting: ReportingService; + private restApiService = appContext.restApiService; + constructor() { super(); this._statuses = {}; @@ -301,7 +301,7 @@ }; // revisions and current_revision must exist hence casting const patchNum = change.revisions![change.current_revision!]._number; - this.$.restAPI + this.restApiService .executeChangeAction( change._number, HttpMethod.POST, @@ -366,7 +366,7 @@ if (input.startsWith('refs/heads/')) { input = input.substring('refs/heads/'.length); } - return this.$.restAPI + return this.restApiService .getRepoBranches(input, this.project, SUGGESTIONS_LIMIT) .then((response: BranchInfo[] | undefined) => { const branches = [];
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_html.ts index 072f110..f784425 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_html.ts
@@ -212,5 +212,4 @@ </template> </div> </gr-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.js b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.js index 07f8f63..cc4bb8f 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-cherrypick-dialog/gr-confirm-cherrypick-dialog_test.js
@@ -113,7 +113,7 @@ test('cherry pick topic submit', done => { element.branch = 'master'; - const executeChangeActionStub = sinon.stub(element.$.restAPI, + const executeChangeActionStub = sinon.stub(element.restApiService, 'executeChangeAction').returns(Promise.resolve([])); MockInteractions.tap(element.shadowRoot. querySelector('gr-dialog').$.confirm);
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.ts index e9cf19e..60e2443 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog.ts
@@ -24,17 +24,12 @@ import {htmlTemplate} from './gr-confirm-move-dialog_html'; import {KeyboardShortcutMixin} from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {RepoName, BranchName} from '../../../types/common'; import {AutocompleteSuggestion} from '../../shared/gr-autocomplete/gr-autocomplete'; +import {appContext} from '../../../services/app-context'; const SUGGESTIONS_LIMIT = 15; -export interface GrConfirmMoveDialog { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-confirm-move-dialog') export class GrConfirmMoveDialog extends KeyboardShortcutMixin( GestureEventListeners(LegacyElementMixin(PolymerElement)) @@ -73,6 +68,8 @@ }; } + private restApiService = appContext.restApiService; + constructor() { super(); this._query = () => this._getProjectBranchesSuggestions(); @@ -108,7 +105,7 @@ if (input.startsWith('refs/heads/')) { input = input.substring('refs/heads/'.length); } - return this.$.restAPI + return this.restApiService .getRepoBranches(input, this.project, SUGGESTIONS_LIMIT) .then(response => { const branches: AutocompleteSuggestion[] = [];
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog_html.ts index b5b46d6..de75a39 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-move-dialog/gr-confirm-move-dialog_html.ts
@@ -79,5 +79,4 @@ ></iron-autogrow-textarea> </div> </gr-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts index db0e1ff..15061d2 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.ts
@@ -30,7 +30,7 @@ AutocompleteQuery, AutocompleteSuggestion, } from '../../shared/gr-autocomplete/gr-autocomplete'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; interface RebaseChange { name: string; @@ -43,7 +43,6 @@ export interface GrConfirmRebaseDialog { $: { - restAPI: RestApiService & Element; parentInput: GrAutocomplete; rebaseOnParentInput: HTMLInputElement; rebaseOnOtherInput: HTMLInputElement; @@ -92,6 +91,8 @@ @property({type: Array}) _recentChanges?: RebaseChange[]; + private restApiService = appContext.restApiService; + constructor() { super(); this._query = input => this._getChangeSuggestions(input); @@ -104,7 +105,7 @@ // in case there are new/updated changes in the generic query since the // last time it was run. fetchRecentChanges() { - return this.$.restAPI + return this.restApiService .getChanges(undefined, 'is:open -age:90d') .then(response => { if (!response) return [];
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_html.ts index 687d31f..7d28de6 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_html.ts
@@ -127,5 +127,4 @@ </div> </div> </gr-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.js b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.js index 8bce572..8b3b73a 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.js
@@ -118,7 +118,7 @@ }, ]; - sinon.stub(element.$.restAPI, 'getChanges').returns(Promise.resolve( + sinon.stub(element.restApiService, 'getChanges').returns(Promise.resolve( [ { _number: 123, @@ -141,13 +141,13 @@ return element._getRecentChanges() .then(() => { assert.deepEqual(element._recentChanges, recentChanges); - assert.equal(element.$.restAPI.getChanges.callCount, 1); + assert.equal(element.restApiService.getChanges.callCount, 1); // When called a second time, should not re-request recent changes. element._getRecentChanges(); }) .then(() => { assert.equal(element._getRecentChanges.callCount, 2); - assert.equal(element.$.restAPI.getChanges.callCount, 1); + assert.equal(element.restApiService.getChanges.callCount, 1); }); });
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_html.ts index 84668ed..6c7b1c2 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_html.ts
@@ -81,5 +81,4 @@ </gr-endpoint-decorator> </div> </gr-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
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 c9a7058..e5405e3 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
@@ -53,8 +53,8 @@ import {ChangeComments} from '../../diff/gr-comment-api/gr-comment-api'; import {GrDiffModeSelector} from '../../diff/gr-diff-mode-selector/gr-diff-mode-selector'; import {DiffViewMode} from '../../../constants/constants'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrButton} from '../../shared/gr-button/gr-button'; +import {appContext} from '../../../services/app-context'; // Maximum length for patch set descriptions. const PATCH_DESC_MAX_LENGTH = 500; @@ -69,7 +69,6 @@ export interface GrFileListHeader { $: { modeSelect: GrDiffModeSelector; - restAPI: RestApiService & Element; expandBtn: GrButton; collapseBtn: GrButton; }; @@ -169,6 +168,8 @@ @property({type: Object}) revisionInfo?: RevisionInfo; + private readonly restApiService = appContext.restApiService; + @computed('loggedIn', 'change', 'account') get _descriptionReadOnly(): boolean { if ( @@ -294,7 +295,7 @@ this.patchNum )!; const sha = this._getPatchsetHash(this.change.revisions, rev); - return this.$.restAPI + return this.restApiService .setDescription(this.changeNum, this.patchNum, desc) .then((res: Response) => { if (res.ok) {
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 1355412..d9beff4 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
@@ -273,5 +273,4 @@ </div> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js index 3469b3a..cee0262 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js +++ b/polygerrit-ui/app/elements/change/gr-file-list-header/gr-file-list-header_test.js
@@ -86,7 +86,7 @@ }); test('description editing', () => { - const putDescStub = sinon.stub(element.$.restAPI, 'setDescription') + const putDescStub = sinon.stub(element.restApiService, 'setDescription') .returns(Promise.resolve({ok: true})); element.changeNum = '42';
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts index d925f96..a77da9e 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts
@@ -54,7 +54,6 @@ specialFilePathCompare, } from '../../../utils/path-list-util'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { ConfigInfo, ElementPropertyDeepChange, @@ -107,7 +106,6 @@ export interface GrFileList { $: { - restAPI: RestApiService & Element; diffPreferencesDialog: GrDiffPreferencesDialog; diffCursor: GrDiffCursor; fileCursor: GrCursorManager; @@ -334,6 +332,8 @@ private readonly reporting = appContext.reportingService; + private readonly restApiService = appContext.restApiService; + get keyBindings() { return { esc: '_handleEscKey', @@ -457,7 +457,7 @@ const promises = []; promises.push( - this.$.restAPI + this.restApiService .getChangeOrEditFiles(changeNum, patchRange) .then(filesByPath => { this._filesByPath = filesByPath; @@ -544,11 +544,11 @@ } _getDiffPreferences() { - return this.$.restAPI.getDiffPreferences(); + return this.restApiService.getDiffPreferences(); } _getPreferences() { - return this.$.restAPI.getPreferences(); + return this.restApiService.getPreferences(); } private _toggleFileExpanded(file: PatchSetFile) { @@ -765,7 +765,7 @@ throw new Error('changeNum and patchRange must be set'); } - return this.$.restAPI.saveFileReviewed( + return this.restApiService.saveFileReviewed( this.changeNum, this.patchRange.patchNum, path, @@ -774,14 +774,14 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _getReviewedFiles(changeNum: NumericChangeId, patchRange: PatchRange) { if (this.editMode) { return Promise.resolve([]); } - return this.$.restAPI.getReviewedFiles(changeNum, patchRange.patchNum); + return this.restApiService.getReviewedFiles(changeNum, patchRange.patchNum); } _normalizeChangeFilesResponse(
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts index d93ce68..b99c96a 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_html.ts
@@ -763,7 +763,6 @@ on-reload-diff-preference="_handleReloadingDiffPreference" > </gr-diff-preferences-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> <gr-diff-cursor id="diffCursor"></gr-diff-cursor> <gr-cursor-manager
diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.js b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.js index c750bd2..8f484e9 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.js +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.js
@@ -1837,7 +1837,7 @@ }); test('_getReviewedFiles does not call API', () => { - const apiSpy = sinon.spy(element.$.restAPI, 'getReviewedFiles'); + const apiSpy = sinon.spy(element.restApiService, 'getReviewedFiles'); element.editMode = true; return element._getReviewedFiles().then(files => { assert.equal(files.length, 0);
diff --git a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.ts b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.ts index 1957f5c..cf96c98 100644 --- a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog.ts
@@ -24,13 +24,7 @@ import {htmlTemplate} from './gr-included-in-dialog_html'; import {customElement, property} from '@polymer/decorators'; import {IncludedInInfo, NumericChangeId} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; - -export interface GrIncludedInDialog { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; interface DisplayGroup { title: string; @@ -63,18 +57,22 @@ @property({type: String}) _filterText = ''; + private readonly restApiService = appContext.restApiService; + loadData() { if (!this.changeNum) { return Promise.reject(new Error('missing required property changeNum')); } this._filterText = ''; - return this.$.restAPI.getChangeIncludedIn(this.changeNum).then(configs => { - if (!configs) { - return; - } - this._includedIn = configs; - this._loaded = true; - }); + return this.restApiService + .getChangeIncludedIn(this.changeNum) + .then(configs => { + if (!configs) { + return; + } + this._includedIn = configs; + this._loaded = true; + }); } _resetData() {
diff --git a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_html.ts index 8e90f3b..2029209 100644 --- a/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-included-in-dialog/gr-included-in-dialog_html.ts
@@ -100,5 +100,4 @@ </ul> </div> </template> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message.ts b/polygerrit-ui/app/elements/change/gr-message/gr-message.ts index 8b0cf4b..e6c20fb 100644 --- a/polygerrit-ui/app/elements/change/gr-message/gr-message.ts +++ b/polygerrit-ui/app/elements/change/gr-message/gr-message.ts
@@ -41,9 +41,9 @@ NumericChangeId, ChangeMessageId, } from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {CommentThread} from '../../../utils/comment-util'; import {hasOwnProperty} from '../../../utils/common-util'; +import {appContext} from '../../../services/app-context'; const PATCH_SET_PREFIX_PATTERN = /^(?:Uploaded\s*)?(?:P|p)atch (?:S|s)et \d+:\s*(.*)/; const LABEL_TITLE_SCORE_PATTERN = /^(-?)([A-Za-z0-9-]+?)([+-]\d+)?[.]?$/; @@ -58,12 +58,6 @@ id: ChangeMessageId; } -export interface GrMessage { - $: { - restAPI: RestApiService & Element; - }; -} - interface ChangeMessage extends ChangeMessageInfo { // TODO(TS): maybe should be an enum instead type: string; @@ -192,6 +186,8 @@ }) _commentCountText = ''; + private readonly restApiService = appContext.restApiService; + created() { super.created(); this.addEventListener('click', e => this._handleClick(e)); @@ -199,13 +195,13 @@ attached() { super.attached(); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this.config = config; }); - this.$.restAPI.getLoggedIn().then(loggedIn => { + this.restApiService.getLoggedIn().then(loggedIn => { this._loggedIn = loggedIn; }); - this.$.restAPI.getIsAdmin().then(isAdmin => { + this.restApiService.getIsAdmin().then(isAdmin => { this._isAdmin = !!isAdmin; }); } @@ -472,7 +468,7 @@ e.preventDefault(); if (!this.message || !this.message.id || !this.changeNum) return; this._isDeletingChangeMsg = true; - this.$.restAPI + this.restApiService .deleteChangeCommitMessage(this.changeNum, this.message.id) .then(() => { this._isDeletingChangeMsg = false; @@ -488,7 +484,7 @@ @observe('projectName') _projectNameChanged(name: string) { - this.$.restAPI.getProjectConfig(name as RepoName).then(config => { + this.restApiService.getProjectConfig(name as RepoName).then(config => { this._projectConfig = config; }); }
diff --git a/polygerrit-ui/app/elements/change/gr-message/gr-message_html.ts b/polygerrit-ui/app/elements/change/gr-message/gr-message_html.ts index ae4adf7..64fc384 100644 --- a/polygerrit-ui/app/elements/change/gr-message/gr-message_html.ts +++ b/polygerrit-ui/app/elements/change/gr-message/gr-message_html.ts
@@ -306,5 +306,4 @@ </span> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts index f8a4af2..42bf1e9 100644 --- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts +++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list.ts
@@ -30,7 +30,6 @@ import {changeIsOpen} from '../../../utils/change-util'; import {getPluginEndpoints} from '../../shared/gr-js-api-interface/gr-plugin-endpoints'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { ChangeId, ChangeInfo, @@ -43,12 +42,7 @@ SubmittedTogetherInfo, } from '../../../types/common'; import {ParsedChangeInfo} from '../../shared/gr-rest-api-interface/gr-reviewer-updates-parser'; - -export interface GrRelatedChangesList { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; function getEmptySubmitTogetherInfo(): SubmittedTogetherInfo { return {changes: [], non_visible_changes: 0}; @@ -117,6 +111,8 @@ @property({type: Array}) _sameTopic?: ChangeInfo[] = []; + private readonly restApiService = appContext.restApiService; + clear() { this.loading = true; this.hidden = true; @@ -135,7 +131,7 @@ const change = this.change; this.loading = true; const promises: Array<Promise<void>> = [ - this.$.restAPI + this.restApiService .getRelatedChanges(change._number, this.patchNum) .then(response => { if (!response) { @@ -148,13 +144,13 @@ response.changes ); }), - this.$.restAPI + this.restApiService .getChangesSubmittedTogether(change._number) .then(response => { this._submittedTogether = response; this._fireReloadEvent(); }), - this.$.restAPI + this.restApiService .getChangeCherryPicks(change.project, change.change_id, change._number) .then(response => { this._cherryPicks = response || []; @@ -165,12 +161,14 @@ // Get conflicts if change is open and is mergeable. if (changeIsOpen(change) && this.mergeable) { promises.push( - this.$.restAPI.getChangeConflicts(change._number).then(response => { - // Because the server doesn't always return a response and the - // template expects an array, always return an array. - this._conflicts = response ? response : []; - this._fireReloadEvent(); - }) + this.restApiService + .getChangeConflicts(change._number) + .then(response => { + // Because the server doesn't always return a response and the + // template expects an array, always return an array. + this._conflicts = response ? response : []; + this._fireReloadEvent(); + }) ); } @@ -181,7 +179,7 @@ throw new Error('_getServerConfig returned undefined '); } if (!config.change.submit_whole_topic) { - return this.$.restAPI + return this.restApiService .getChangesWithSameTopic(change.topic, change._number) .then(response => { this._sameTopic = response; @@ -222,7 +220,7 @@ } _getServerConfig() { - return this.$.restAPI.getConfig(); + return this.restApiService.getConfig(); } _computeChangeURL(
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_html.ts b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_html.ts index d4cd0f6..0f42028 100644 --- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_html.ts +++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_html.ts
@@ -214,5 +214,4 @@ </gr-endpoint-decorator> </div> <div hidden$="[[!loading]]">Loading...</div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.js b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.js index 3983c5a..e71df971 100644 --- a/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.js +++ b/polygerrit-ui/app/elements/change/gr-related-changes-list/gr-related-changes-list_test.js
@@ -237,13 +237,13 @@ }; element.mergeable = true; element.addEventListener('new-section-loaded', loadedStub); - sinon.stub(element.$.restAPI, 'getRelatedChanges') + sinon.stub(element.restApiService, 'getRelatedChanges') .returns(Promise.resolve({changes: []})); - sinon.stub(element.$.restAPI, 'getChangesSubmittedTogether') + sinon.stub(element.restApiService, 'getChangesSubmittedTogether') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getChangeCherryPicks') + sinon.stub(element.restApiService, 'getChangeCherryPicks') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getChangeConflicts') + sinon.stub(element.restApiService, 'getChangeConflicts') .returns(Promise.resolve()); return element.reload().then(() => { @@ -257,13 +257,13 @@ setup(() => { element = basicFixture.instantiate(); - sinon.stub(element.$.restAPI, 'getRelatedChanges') + sinon.stub(element.restApiService, 'getRelatedChanges') .returns(Promise.resolve({changes: []})); - sinon.stub(element.$.restAPI, 'getChangesSubmittedTogether') + sinon.stub(element.restApiService, 'getChangesSubmittedTogether') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getChangeCherryPicks') + sinon.stub(element.restApiService, 'getChangeCherryPicks') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getChangeConflicts') + sinon.stub(element.restApiService, 'getChangeConflicts') .returns(Promise.resolve()); }); @@ -286,13 +286,13 @@ setup(() => { element = basicFixture.instantiate(); - sinon.stub(element.$.restAPI, 'getRelatedChanges') + sinon.stub(element.restApiService, 'getRelatedChanges') .returns(Promise.resolve({changes: []})); - sinon.stub(element.$.restAPI, 'getChangesSubmittedTogether') + sinon.stub(element.restApiService, 'getChangesSubmittedTogether') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getChangeCherryPicks') + sinon.stub(element.restApiService, 'getChangeCherryPicks') .returns(Promise.resolve()); - conflictsStub = sinon.stub(element.$.restAPI, 'getChangeConflicts') + conflictsStub = sinon.stub(element.restApiService, 'getChangeConflicts') .returns(Promise.resolve()); });
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts index f42adc6..d0d0745 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.ts
@@ -51,10 +51,7 @@ import {IronA11yAnnouncer} from '@polymer/iron-a11y-announcer/iron-a11y-announcer'; import {TargetElement} from '../../plugins/gr-plugin-types'; import {customElement, observe, property} from '@polymer/decorators'; -import { - ErrorCallback, - RestApiService, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import {FixIronA11yAnnouncer} from '../../../types/types'; import { AccountAddition, @@ -158,7 +155,6 @@ export interface GrReplyDialog { $: { - restAPI: RestApiService & Element; jsAPI: JsApiService & Element; reviewers: GrAccountList; ccs: GrAccountList; @@ -374,6 +370,8 @@ @property({type: Array, computed: '_computeAllReviewers(_reviewers.*)'}) _allReviewers: (AccountInfo | GroupInfo)[] = []; + private readonly restApiService = appContext.restApiService; + get keyBindings() { return { esc: '_handleEscKey', @@ -431,7 +429,7 @@ open(focusTarget?: FocusTarget) { if (!this.change) throw new Error('missing required change property'); this.knownLatestState = LatestPatchState.CHECKING; - fetchChangeUpdates(this.change, this.$.restAPI).then(result => { + fetchChangeUpdates(this.change, this.restApiService).then(result => { this.knownLatestState = result.isLatest ? LatestPatchState.LATEST : LatestPatchState.NOT_LATEST; @@ -446,9 +444,9 @@ // Otherwise, check for an unsaved draft in localstorage. this.draft = this._loadStoredDraft(); } - if (this.$.restAPI.hasPendingDiffDrafts()) { + if (this.restApiService.hasPendingDiffDrafts()) { this._savingComments = true; - this.$.restAPI.awaitPendingDiffDrafts().then(() => { + this.restApiService.awaitPendingDiffDrafts().then(() => { this.dispatchEvent( new CustomEvent('comment-refresh', { composed: true, @@ -611,7 +609,7 @@ return; } - return this.$.restAPI + return this.restApiService .removeChangeReviewer(this.change._number, accountKey(account)) .then((response?: Response) => { if (!response?.ok || !this.change) return; @@ -811,7 +809,7 @@ // Using response.clone() here, because getResponseObject() and // potentially the generic error handler will want to call text() on the // response object, which can only be done once per object. - const jsonPromise = this.$.restAPI.getResponseObject(response.clone()); + const jsonPromise = this.restApiService.getResponseObject(response.clone()); return jsonPromise.then((parsed: ParsedJSON) => { const result = parsed as ReviewResult; // Only perform custom error handling for 400s and a parseable @@ -1224,7 +1222,7 @@ } _getAccount() { - return this.$.restAPI.getAccount(); + return this.restApiService.getAccount(); } _cancelTapHandler(e: Event) { @@ -1291,7 +1289,7 @@ _saveReview(review: ReviewInput, errFn?: ErrorCallback) { if (!this.change) throw new Error('missing required change property'); if (!this.patchNum) throw new Error('missing required patchNum property'); - return this.$.restAPI.saveChangeReview( + return this.restApiService.saveChangeReview( this.change._number, this.patchNum, review, @@ -1467,7 +1465,7 @@ _getReviewerSuggestionsProvider(change: ChangeInfo) { const provider = GrReviewerSuggestionsProvider.create( - this.$.restAPI, + this.restApiService, change._number, SUGGESTIONS_PROVIDERS_USERS_TYPES.REVIEWER ); @@ -1477,7 +1475,7 @@ _getCcSuggestionsProvider(change: ChangeInfo) { const provider = GrReviewerSuggestionsProvider.create( - this.$.restAPI, + this.restApiService, change._number, SUGGESTIONS_PROVIDERS_USERS_TYPES.CC );
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_html.ts index c56a5c9..45c4799 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_html.ts
@@ -617,6 +617,5 @@ </div> </div> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> `;
diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.js b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.js index b612a57..a606624 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.js +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.js
@@ -131,7 +131,7 @@ try { const result = jsonResponseProducer(review) || {}; const resultStr = - element.$.restAPI.JSON_PREFIX + JSON.stringify(result); + element.restApiService.JSON_PREFIX + JSON.stringify(result); resolve({ ok: true, text() { @@ -977,7 +977,7 @@ }); test('_removeAccount', done => { - sinon.stub(element.$.restAPI, 'removeChangeReviewer') + sinon.stub(element.restApiService, 'removeChangeReviewer') .returns(Promise.resolve({ok: true})); const arr = [makeAccount(), makeAccount()]; element.change.reviewers = { @@ -1283,7 +1283,7 @@ setup(() => { startReviewStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'startReview') .callsFake(() => Promise.resolve()); }); @@ -1371,8 +1371,9 @@ const refreshHandler = sinon.stub(); element.addEventListener('comment-refresh', refreshHandler); - sinon.stub(element.$.restAPI, 'hasPendingDiffDrafts').returns(true); - element.$.restAPI._pendingRequests.sendDiffDraft = [promise]; + sinon.stub(element.restApiService, 'hasPendingDiffDrafts').returns( + true); + element.restApiService._pendingRequests.sendDiffDraft = [promise]; element.open(); assert.isFalse(refreshHandler.called); @@ -1380,14 +1381,15 @@ promise.resolve(); - return element.$.restAPI.awaitPendingDiffDrafts().then(() => { + return element.restApiService.awaitPendingDiffDrafts().then(() => { assert.isTrue(refreshHandler.called); assert.isFalse(element._savingComments); }); }); test('no', () => { - sinon.stub(element.$.restAPI, 'hasPendingDiffDrafts').returns(false); + sinon.stub(element.restApiService, 'hasPendingDiffDrafts').returns( + false); element.open(); assert.notOk(element._savingComments); });
diff --git a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts index 9c3fa42..33ac51f 100644 --- a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts +++ b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list.ts
@@ -39,16 +39,10 @@ } from '../../../types/common'; import {PolymerDeepPropertyChange} from '@polymer/polymer/interfaces'; import {GrAccountChip} from '../../shared/gr-account-chip/gr-account-chip'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {hasOwnProperty} from '../../../utils/common-util'; import {isRemovableReviewer} from '../../../utils/change-util'; import {ReviewerState} from '../../../constants/constants'; - -export interface GrReviewerList { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; @customElement('gr-reviewer-list') export class GrReviewerList extends GestureEventListeners( @@ -94,6 +88,8 @@ @property({type: Object}) _xhrPromise?: Promise<Response | undefined>; + private readonly restApiService = appContext.restApiService; + @computed('ccsOnly') get _addLabel() { return this.ccsOnly ? 'Add CC' : 'Add reviewer'; @@ -323,6 +319,6 @@ _removeReviewer(id: AccountId | EmailAddress): Promise<Response | undefined> { if (!this.change) return Promise.resolve(undefined); - return this.$.restAPI.removeChangeReviewer(this.change._number, id); + return this.restApiService.removeChangeReviewer(this.change._number, id); } }
diff --git a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list_html.ts b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list_html.ts index 616a7db..dd18d03 100644 --- a/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list_html.ts +++ b/polygerrit-ui/app/elements/change/gr-reviewer-list/gr-reviewer-list_html.ts
@@ -69,5 +69,4 @@ > </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.ts b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.ts index cab17dd..28327a1 100644 --- a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.ts +++ b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog.ts
@@ -24,7 +24,7 @@ import {htmlTemplate} from './gr-upload-help-dialog_html'; import {customElement, property} from '@polymer/decorators'; import {RevisionInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; const COMMIT_COMMAND = 'git add . && git commit --amend --no-edit'; const PUSH_COMMAND_PREFIX = 'git push origin HEAD:refs/for/'; @@ -32,12 +32,6 @@ // Command names correspond to download plugin definitions. const PREFERRED_FETCH_COMMAND_ORDER = ['checkout', 'cherry pick', 'pull']; -export interface GrUploadHelpDialog { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-upload-help-dialog') export class GrUploadHelpDialog extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -73,13 +67,17 @@ @property({type: String, computed: '_computePushCommand(targetBranch)'}) _pushCommand?: string; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); - this.$.restAPI + this.restApiService .getLoggedIn() .then(loggedIn => - loggedIn ? this.$.restAPI.getPreferences() : Promise.resolve(undefined) + loggedIn + ? this.restApiService.getPreferences() + : Promise.resolve(undefined) ) .then(prefs => { if (prefs) {
diff --git a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog_html.ts b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog_html.ts index 1ee3a3a..d44cbb0 100644 --- a/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog_html.ts +++ b/polygerrit-ui/app/elements/change/gr-upload-help-dialog/gr-upload-help-dialog_html.ts
@@ -66,5 +66,4 @@ </ol> </div> </gr-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.ts b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.ts index ef0ced8..56cb763 100644 --- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.ts +++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown.ts
@@ -26,7 +26,7 @@ import {getUserName} from '../../../utils/display-name-util'; import {customElement, property} from '@polymer/decorators'; import {AccountInfo, ServerInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; const INTERPOLATE_URL_PATTERN = /\${([\w]+)}/g; @@ -36,12 +36,6 @@ } } -export interface GrAccountDropdown { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-account-dropdown') export class GrAccountDropdown extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -71,12 +65,14 @@ @property({type: String}) _switchAccountUrl = ''; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); this._handleLocationChange(); this.listen(window, 'location-change', '_handleLocationChange'); - this.$.restAPI.getConfig().then(cfg => { + this.restApiService.getConfig().then(cfg => { this.config = cfg; if (cfg && cfg.auth && cfg.auth.switch_account_url) {
diff --git a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_html.ts b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_html.ts index b67e1e8..0fa2f1e 100644 --- a/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_html.ts +++ b/polygerrit-ui/app/elements/core/gr-account-dropdown/gr-account-dropdown_html.ts
@@ -49,5 +49,4 @@ aria-label="Account avatar" ></gr-avatar> </gr-dropdown> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts index e4e4056..91a8ebf 100644 --- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts +++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager.ts
@@ -35,7 +35,6 @@ import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {GrErrorDialog} from '../gr-error-dialog/gr-error-dialog'; import {GrAlert} from '../../shared/gr-alert/gr-alert'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {FetchRequest} from '../../shared/gr-rest-api-interface/gr-rest-apis/gr-rest-api-helper'; import {ErrorType, FixIronA11yAnnouncer} from '../../../types/types'; import {AccountId} from '../../../types/common'; @@ -72,7 +71,6 @@ noInteractionOverlay: GrOverlay; errorDialog: GrErrorDialog; errorOverlay: GrOverlay; - restAPI: RestApiService & Element; }; } @customElement('gr-error-manager') @@ -116,11 +114,11 @@ _authErrorHandlerDeregistrationHook?: Function; + private readonly restApiService = appContext.restApiService; + constructor() { super(); - this._authService = appContext.authService; - this.reporting = appContext.reportingService; this.eventEmitter = appContext.eventEmitter; } @@ -204,7 +202,7 @@ // This indicates the auth token may no longer valid. // Re-check on auth this._authService.clearCache(); - this.$.restAPI.getLoggedIn(); + this.restApiService.getLoggedIn(); } else if (!this._shouldSuppressError(errorText)) { const trace = response.headers && response.headers.get('X-Gerrit-Trace'); @@ -239,7 +237,7 @@ url, trace, }: ErrorMsg) { - this.$.restAPI.getLoggedIn().then(isLoggedIn => { + this.restApiService.getLoggedIn().then(isLoggedIn => { const tip = isLoggedIn ? 'You might have not enough privileges.' : 'You might have not enough privileges. Sign in and try again.'; @@ -422,10 +420,10 @@ this._lastCredentialCheck = Date.now(); // force to refetch account info - this.$.restAPI.invalidateAccountsCache(); + this.restApiService.invalidateAccountsCache(); this._authService.clearCache(); - this.$.restAPI.getLoggedIn().then(isLoggedIn => { + this.restApiService.getLoggedIn().then(isLoggedIn => { // do nothing if its refreshing if (!this._refreshingCredentials) return; @@ -437,7 +435,7 @@ this._requestCheckLoggedIn(); } else { // check account - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { if (this._refreshingCredentials) { // If the credentials were refreshed but the account is different // then reload the page completely.
diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_html.ts b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_html.ts index 1cefb78..c67ed07 100644 --- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_html.ts +++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_html.ts
@@ -34,5 +34,4 @@ no-cancel-on-outside-click="" > </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.js b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.js index f13276f..7fc35c6 100644 --- a/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.js +++ b/polygerrit-ui/app/elements/core/gr-error-manager/gr-error-manager_test.js
@@ -67,7 +67,7 @@ element, '_showAuthErrorAlert' ); const responseText = Promise.resolve('Authentication required\n'); - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); element.dispatchEvent( new CustomEvent('server-error', { @@ -83,9 +83,9 @@ test('recheck auth for 403 with auth error if authed before', done => { // starts with authed state - element.$.restAPI.getLoggedIn(); + element.restApiService.getLoggedIn(); const responseText = Promise.resolve('Authentication required\n'); - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); element.dispatchEvent( new CustomEvent('server-error', { @@ -94,7 +94,7 @@ composed: true, bubbles: true, })); flush(() => { - assert.isTrue(element.$.restAPI.getLoggedIn.calledOnce); + assert.isTrue(element.restApiService.getLoggedIn.calledOnce); done(); }); }); @@ -241,8 +241,9 @@ test('show auth refresh toast', async () => { // starts with authed state - element.$.restAPI.getLoggedIn(); - const refreshStub = sinon.stub(element.$.restAPI, 'getAccount').callsFake( + element.restApiService.getLoggedIn(); + const refreshStub = sinon.stub(element.restApiService, + 'getAccount').callsFake( () => Promise.resolve({})); const windowOpen = sinon.stub(window, 'open'); const responseText = Promise.resolve('Authentication required\n'); @@ -313,7 +314,7 @@ test('auth toast should dismiss existing toast', async () => { // starts with authed state - element.$.restAPI.getLoggedIn(); + element.restApiService.getLoggedIn(); const responseText = Promise.resolve('Authentication required\n'); // fake an alert @@ -353,7 +354,7 @@ test('regular toast should dismiss regular toast', () => { // starts with authed state - element.$.restAPI.getLoggedIn(); + element.restApiService.getLoggedIn(); // fake an alert element.dispatchEvent( @@ -379,7 +380,7 @@ test('regular toast should not dismiss auth toast', done => { // starts with authed state - element.$.restAPI.getLoggedIn(); + element.restApiService.getLoggedIn(); const responseText = Promise.resolve('Authentication required\n'); // fake auth @@ -456,7 +457,7 @@ test('refreshes with same credentials', done => { const accountPromise = Promise.resolve({_account_id: 1234}); - sinon.stub(element.$.restAPI, 'getAccount') + sinon.stub(element.restApiService, 'getAccount') .returns(accountPromise); const requestCheckStub = sinon.stub(element, '_requestCheckLoggedIn'); const handleRefreshStub = sinon.stub(element, @@ -513,7 +514,7 @@ test('reloads when refreshed credentials differ', done => { const accountPromise = Promise.resolve({_account_id: 1234}); - sinon.stub(element.$.restAPI, 'getAccount') + sinon.stub(element.restApiService, 'getAccount') .returns(accountPromise); const requestCheckStub = sinon.stub( element,
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts index c4ed683..f1b9ea1 100644 --- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts +++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts
@@ -29,7 +29,6 @@ import {getPluginLoader} from '../../shared/gr-js-api-interface/gr-plugin-loader'; import {getAdminLinks, NavLink} from '../../../utils/admin-nav-util'; import {customElement, property, observe} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AccountDetailInfo, RequireProperties, @@ -40,6 +39,7 @@ import {JsApiService} from '../../shared/gr-js-api-interface/gr-js-api-types'; import {AuthType} from '../../../constants/constants'; import {DropdownLink} from '../../shared/gr-dropdown/gr-dropdown'; +import {appContext} from '../../../services/app-context'; type MainHeaderLink = RequireProperties<DropdownLink, 'url' | 'name'>; @@ -105,7 +105,6 @@ export interface GrMainHeader { $: { - restAPI: RestApiService & Element; jsAPI: JsApiService & Element; }; } @@ -161,6 +160,8 @@ @property({type: Boolean}) mobileSearchHidden = false; + private readonly restApiService = appContext.restApiService; + /** @override */ ready() { super.ready(); @@ -274,8 +275,8 @@ this.loading = true; return Promise.all([ - this.$.restAPI.getAccount(), - this.$.restAPI.getTopMenus(), + this.restApiService.getAccount(), + this.restApiService.getTopMenus(), getPluginLoader().awaitPluginsLoaded(), ]).then(result => { const account = result[0]; @@ -287,7 +288,7 @@ return getAdminLinks( account, () => - this.$.restAPI.getAccountCapabilities().then(capabilities => { + this.restApiService.getAccountCapabilities().then(capabilities => { if (!capabilities) { throw new Error('getAccountCapabilities returns undefined'); } @@ -301,14 +302,14 @@ } _loadConfig() { - this.$.restAPI + this.restApiService .getConfig() .then(config => { if (!config) { throw new Error('getConfig returned undefined'); } this._retrieveRegisterURL(config); - return getDocsBaseUrl(config, this.$.restAPI); + return getDocsBaseUrl(config, this.restApiService); }) .then(docBaseUrl => { this._docBaseUrl = docBaseUrl; @@ -321,7 +322,7 @@ return; } - this.$.restAPI.getPreferences().then(prefs => { + this.restApiService.getPreferences().then(prefs => { this._userLinks = prefs && prefs.my ? prefs.my.map(this._createHeaderLink) : []; });
diff --git a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_html.ts b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_html.ts index 5778fb8..0cdd0f2 100644 --- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_html.ts +++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header_html.ts
@@ -239,5 +239,4 @@ </div> </nav> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts index 79f029b..d0e1167d 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.ts
@@ -63,7 +63,6 @@ ServerInfo, UrlEncodedCommentId, } from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AppElement, AppElementParams, @@ -267,12 +266,6 @@ }); })(); -export interface GrRouter { - $: { - restAPI: RestApiService & Element; - }; -} - export interface PageContextWithQueryMap extends PageContext { queryMap: Map<string, string> | URLSearchParams; } @@ -314,6 +307,8 @@ private readonly reporting = appContext.reportingService; + private readonly restApiService = appContext.restApiService; + constructor() { super(); } @@ -658,7 +653,7 @@ return Promise.resolve(); } - return this.$.restAPI + return this.restApiService .getFromProjectLookup(params.changeNum) .then(project => { // Show a 404 and terminate if the lookup request failed. Attempting @@ -745,7 +740,7 @@ * (if it resolves). */ _redirectIfNotLoggedIn(data: PageContext) { - return this.$.restAPI.getLoggedIn().then(loggedIn => { + return this.restApiService.getLoggedIn().then(loggedIn => { if (loggedIn) { return Promise.resolve(); } else { @@ -757,7 +752,7 @@ /** Page.js middleware that warms the REST API's logged-in cache line. */ _loadUserMiddleware(_: PageContext, next: PageNextCallback) { - this.$.restAPI.getLoggedIn().then(() => { + this.restApiService.getLoggedIn().then(() => { next(); }); } @@ -1125,7 +1120,7 @@ this._redirect(newUrl); return null; } - return this.$.restAPI.getLoggedIn().then(loggedIn => { + return this.restApiService.getLoggedIn().then(loggedIn => { if (loggedIn) { this._redirect('/dashboard/self'); } else { @@ -1183,7 +1178,7 @@ // User dashboard. We require viewing user to be logged in, else we // redirect to login for self dashboard or simple owner search for // other user dashboard. - return this.$.restAPI.getLoggedIn().then(loggedIn => { + return this.restApiService.getLoggedIn().then(loggedIn => { if (!loggedIn) { if (data.params[0].toLowerCase() === 'self') { this._redirectToLogin(data.canonicalPath);
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_html.ts b/polygerrit-ui/app/elements/core/gr-router/gr-router_html.ts index 91d8b41..1489006 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router_html.ts +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_html.ts
@@ -16,6 +16,4 @@ */ import {html} from '@polymer/polymer/lib/utils/html-tag'; -export const htmlTemplate = html` - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> -`; +export const htmlTemplate = html``;
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js index 927434b..cdec405 100644 --- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js +++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.js
@@ -229,7 +229,7 @@ }); test('_redirectIfNotLoggedIn while logged in', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); const data = {canonicalPath: ''}; const redirectStub = sinon.stub(element, '_redirectToLogin'); @@ -239,7 +239,7 @@ }); test('_redirectIfNotLoggedIn while logged out', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(false)); const redirectStub = sinon.stub(element, '_redirectToLogin'); const data = {canonicalPath: ''}; @@ -524,7 +524,7 @@ setup(() => { projectLookupStub = sinon - .stub(element.$.restAPI, 'getFromProjectLookup'); + .stub(element.restApiService, 'getFromProjectLookup'); generateUrlStub = sinon.stub(element, '_generateUrl'); }); @@ -794,7 +794,7 @@ }); test('redirects to dashboard if logged in', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); const data = { canonicalPath: '/', path: '/', querystring: '', hash: '', @@ -807,7 +807,7 @@ }); test('redirects to open changes if not logged in', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(false)); const data = { canonicalPath: '/', path: '/', querystring: '', hash: '', @@ -905,7 +905,7 @@ }); test('own dashboard but signed out redirects to login', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(false)); const data = {canonicalPath: '/dashboard/', params: {0: 'seLF'}}; return element._handleDashboardRoute(data, '').then(() => { @@ -916,7 +916,7 @@ }); test('non-self dashboard but signed out does not redirect', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(false)); const data = {canonicalPath: '/dashboard/', params: {0: 'foo'}}; return element._handleDashboardRoute(data, '').then(() => { @@ -928,7 +928,7 @@ }); test('dashboard while signed in sets params', () => { - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); const data = {canonicalPath: '/dashboard/', params: {0: 'foo'}}; return element._handleDashboardRoute(data, '').then(() => { @@ -1444,7 +1444,7 @@ setup(() => { normalizeRangeStub = sinon.stub(element, '_normalizePatchRangeParams'); - sinon.stub(element.$.restAPI, 'setInProjectLookup'); + sinon.stub(element.restApiService, 'setInProjectLookup'); }); test('needs redirect', () => { @@ -1498,7 +1498,7 @@ setup(() => { normalizeRangeStub = sinon.stub(element, '_normalizePatchRangeParams'); - sinon.stub(element.$.restAPI, 'setInProjectLookup'); + sinon.stub(element.restApiService, 'setInProjectLookup'); }); test('needs redirect', () => { @@ -1551,7 +1551,7 @@ test('_handleDiffEditRoute', () => { const normalizeRangeSpy = sinon.spy(element, '_normalizePatchRangeParams'); - sinon.stub(element.$.restAPI, 'setInProjectLookup'); + sinon.stub(element.restApiService, 'setInProjectLookup'); const ctx = { params: [ 'foo/bar', // 0 Project @@ -1580,7 +1580,7 @@ test('_handleDiffEditRoute with lineNum', () => { const normalizeRangeSpy = sinon.spy(element, '_normalizePatchRangeParams'); - sinon.stub(element.$.restAPI, 'setInProjectLookup'); + sinon.stub(element.restApiService, 'setInProjectLookup'); const ctx = { params: [ 'foo/bar', // 0 Project @@ -1610,7 +1610,7 @@ test('_handleChangeEditRoute', () => { const normalizeRangeSpy = sinon.spy(element, '_normalizePatchRangeParams'); - sinon.stub(element.$.restAPI, 'setInProjectLookup'); + sinon.stub(element.restApiService, 'setInProjectLookup'); const ctx = { params: [ 'foo/bar', // 0 Project
diff --git a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts index d785a2f..dc9a92f 100644 --- a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts +++ b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar.ts
@@ -28,7 +28,6 @@ } from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin'; import {customElement, property} from '@polymer/decorators'; import {ServerInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AutocompleteQuery, AutocompleteSuggestion, @@ -37,6 +36,7 @@ import {getDocsBaseUrl} from '../../../utils/url-util'; import {CustomKeyboardEvent} from '../../../types/events'; import {MergeabilityComputationBehavior} from '../../../constants/constants'; +import {appContext} from '../../../services/app-context'; // Possible static search options for auto complete, without negations. const SEARCH_OPERATORS: ReadonlyArray<string> = [ @@ -136,7 +136,6 @@ export interface GrSearchBar { $: { - restAPI: RestApiService & Element; searchInput: GrAutocomplete; }; } @@ -187,6 +186,8 @@ @property({type: String}) docBaseUrl: string | null = null; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this.query = (input: string) => this._getSearchSuggestions(input); @@ -194,7 +195,7 @@ attached() { super.attached(); - this.$.restAPI.getConfig().then((serverConfig?: ServerInfo) => { + this.restApiService.getConfig().then((serverConfig?: ServerInfo) => { const mergeability = serverConfig && serverConfig.change && @@ -209,7 +210,7 @@ this._addOperator('is:mergeable'); } if (serverConfig) { - getDocsBaseUrl(serverConfig, this.$.restAPI).then(baseUrl => { + getDocsBaseUrl(serverConfig, this.restApiService).then(baseUrl => { this.docBaseUrl = baseUrl; }); }
diff --git a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_html.ts b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_html.ts index 2ee0058..a0de7f2 100644 --- a/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_html.ts +++ b/polygerrit-ui/app/elements/core/gr-search-bar/gr-search-bar_html.ts
@@ -56,5 +56,4 @@ </a> </gr-autocomplete> </form> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search.ts b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search.ts index a818c59..042d4fe 100644 --- a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search.ts +++ b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search.ts
@@ -23,24 +23,18 @@ import {GerritNav} from '../gr-navigation/gr-navigation'; import {getUserName} from '../../../utils/display-name-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {AccountInfo, ServerInfo} from '../../../types/common'; import { SearchBarHandleSearchDetail, SuggestionProvider, } from '../gr-search-bar/gr-search-bar'; import {AutocompleteSuggestion} from '../../shared/gr-autocomplete/gr-autocomplete'; +import {appContext} from '../../../services/app-context'; const MAX_AUTOCOMPLETE_RESULTS = 10; const SELF_EXPRESSION = 'self'; const ME_EXPRESSION = 'me'; -export interface GrSmartSearch { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-smart-search') export class GrSmartSearch extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -70,10 +64,12 @@ @property({type: String}) label = ''; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); - this.$.restAPI.getConfig().then(cfg => { + this.restApiService.getConfig().then(cfg => { this._config = cfg; }); } @@ -97,7 +93,7 @@ predicate: string, expression: string ): Promise<AutocompleteSuggestion[]> { - return this.$.restAPI + return this.restApiService .getSuggestedProjects(expression, MAX_AUTOCOMPLETE_RESULTS) .then(projects => { if (!projects) { @@ -125,7 +121,7 @@ if (expression.length === 0) { return Promise.resolve([]); } - return this.$.restAPI + return this.restApiService .getSuggestedGroups(expression, MAX_AUTOCOMPLETE_RESULTS) .then(groups => { if (!groups) { @@ -153,7 +149,7 @@ if (expression.length === 0) { return Promise.resolve([]); } - return this.$.restAPI + return this.restApiService .getSuggestedAccounts(expression, MAX_AUTOCOMPLETE_RESULTS) .then(accounts => { if (!accounts) {
diff --git a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_html.ts b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_html.ts index 7088937..c08df15 100644 --- a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_html.ts +++ b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_html.ts
@@ -27,5 +27,4 @@ group-suggestions="[[_groupSuggestions]]" account-suggestions="[[_accountSuggestions]]" ></gr-search-bar> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_test.js b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_test.js index dc7bf0e..d7e6c27 100644 --- a/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_test.js +++ b/polygerrit-ui/app/elements/core/gr-smart-search/gr-smart-search_test.js
@@ -28,7 +28,7 @@ }); test('Autocompletes accounts', () => { - sinon.stub(element.$.restAPI, 'getSuggestedAccounts').callsFake(() => + sinon.stub(element.restApiService, 'getSuggestedAccounts').callsFake(() => Promise.resolve([ { name: 'fred', @@ -42,7 +42,7 @@ }); test('Inserts self as option when valid', () => { - sinon.stub(element.$.restAPI, 'getSuggestedAccounts').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedAccounts').callsFake( () => Promise.resolve([ { name: 'fred', @@ -62,7 +62,7 @@ }); test('Inserts me as option when valid', () => { - sinon.stub(element.$.restAPI, 'getSuggestedAccounts').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedAccounts').callsFake( () => Promise.resolve([ { name: 'fred', @@ -82,7 +82,7 @@ }); test('Autocompletes groups', () => { - sinon.stub(element.$.restAPI, 'getSuggestedGroups').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedGroups').callsFake( () => Promise.resolve({ Polygerrit: 0, gerrit: 0, @@ -95,7 +95,7 @@ }); test('Autocompletes projects', () => { - sinon.stub(element.$.restAPI, 'getSuggestedProjects').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedProjects').callsFake( () => Promise.resolve({Polygerrit: 0})); return element._fetchProjects('project', 'pol').then(s => { assert.deepEqual(s[0], {text: 'project:Polygerrit'}); @@ -103,7 +103,7 @@ }); test('Autocomplete doesnt override exact matches to input', () => { - sinon.stub(element.$.restAPI, 'getSuggestedGroups').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedGroups').callsFake( () => Promise.resolve({ Polygerrit: 0, gerrit: 0, @@ -118,7 +118,7 @@ }); test('Autocompletes accounts with no email', () => { - sinon.stub(element.$.restAPI, 'getSuggestedAccounts').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedAccounts').callsFake( () => Promise.resolve([{name: 'fred'}])); return element._fetchAccounts('owner', 'fr').then(s => { assert.deepEqual(s[0], {text: 'owner:"fred"', label: 'fred'}); @@ -126,7 +126,7 @@ }); test('Autocompletes accounts with email', () => { - sinon.stub(element.$.restAPI, 'getSuggestedAccounts').callsFake( () => + sinon.stub(element.restApiService, 'getSuggestedAccounts').callsFake( () => Promise.resolve([{email: 'fred@goog.co'}])); return element._fetchAccounts('owner', 'fr').then(s => { assert.deepEqual(s[0], {text: 'owner:fred@goog.co', label: ''});
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts index d89bb24..50dede4 100644 --- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts +++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api.ts
@@ -39,7 +39,6 @@ } from '../../../types/common'; import {hasOwnProperty} from '../../../utils/common-util'; import {CommentSide, Side} from '../../../constants/constants'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { Comment, CommentMap, @@ -53,6 +52,7 @@ createCommentThreads, } from '../../../utils/comment-util'; import {PatchSetFile, PatchNumOnly, isPatchSetFile} from '../../../types/types'; +import {appContext} from '../../../services/app-context'; export type CommentIdToCommentThreadMap = { [urlEncodedCommentId: string]: CommentThread; @@ -552,12 +552,6 @@ export const _testOnly_findCommentById = ChangeComments.prototype.findCommentById; -export interface GrCommentApi { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-comment-api') export class GrCommentApi extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -569,6 +563,8 @@ @property({type: Object}) _changeComments?: ChangeComments; + private readonly restApiService = appContext.restApiService; + /** @override */ created() { super.created(); @@ -583,8 +579,8 @@ getPortedComments(changeNum: NumericChangeId, revision?: RevisionId) { if (!revision) revision = CURRENT; return Promise.all([ - this.$.restAPI.getPortedComments(changeNum, revision), - this.$.restAPI.getPortedDrafts(changeNum, revision), + this.restApiService.getPortedComments(changeNum, revision), + this.restApiService.getPortedDrafts(changeNum, revision), ]).then(result => { return { portedComments: result[0], @@ -600,9 +596,9 @@ */ loadAll(changeNum: NumericChangeId) { const promises = []; - promises.push(this.$.restAPI.getDiffComments(changeNum)); - promises.push(this.$.restAPI.getDiffRobotComments(changeNum)); - promises.push(this.$.restAPI.getDiffDrafts(changeNum)); + promises.push(this.restApiService.getDiffComments(changeNum)); + promises.push(this.restApiService.getDiffRobotComments(changeNum)); + promises.push(this.restApiService.getDiffDrafts(changeNum)); return Promise.all(promises).then(([comments, robotComments, drafts]) => { this._changeComments = new ChangeComments( @@ -627,7 +623,7 @@ return this.loadAll(changeNum); } const oldChangeComments = this._changeComments; - return this.$.restAPI.getDiffDrafts(changeNum).then(drafts => { + return this.restApiService.getDiffDrafts(changeNum).then(drafts => { this._changeComments = new ChangeComments( oldChangeComments.comments, (oldChangeComments.robotComments as unknown) as PathToRobotCommentsInfoMap,
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_html.ts b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_html.ts index 91d8b41..1489006 100644 --- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_html.ts +++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_html.ts
@@ -16,6 +16,4 @@ */ import {html} from '@polymer/polymer/lib/utils/html-tag'; -export const htmlTemplate = html` - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> -`; +export const htmlTemplate = html``;
diff --git a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js index c2c1c72..cd73430 100644 --- a/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js +++ b/polygerrit-ui/app/elements/diff/gr-comment-api/gr-comment-api_test.js
@@ -34,23 +34,24 @@ test('loads logged-out', () => { const changeNum = 1234; - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(false)); - sinon.stub(element.$.restAPI, 'getDiffComments') + sinon.stub(element.restApiService, 'getDiffComments') .returns(Promise.resolve({ 'foo.c': [{id: '123', message: 'foo bar', in_reply_to: '321'}], })); - sinon.stub(element.$.restAPI, 'getDiffRobotComments') + sinon.stub(element.restApiService, 'getDiffRobotComments') .returns(Promise.resolve({'foo.c': [{id: '321', message: 'done'}]})); - sinon.stub(element.$.restAPI, 'getDiffDrafts') + sinon.stub(element.restApiService, 'getDiffDrafts') .returns(Promise.resolve({})); return element.loadAll(changeNum).then(() => { - assert.isTrue(element.$.restAPI.getDiffComments.calledWithExactly( + assert.isTrue(element.restApiService.getDiffComments.calledWithExactly( changeNum)); - assert.isTrue(element.$.restAPI.getDiffRobotComments.calledWithExactly( - changeNum)); - assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly( + assert.isTrue( + element.restApiService.getDiffRobotComments.calledWithExactly( + changeNum)); + assert.isTrue(element.restApiService.getDiffDrafts.calledWithExactly( changeNum)); assert.isOk(element._changeComments._comments); assert.isOk(element._changeComments._robotComments); @@ -61,23 +62,24 @@ test('loads logged-in', () => { const changeNum = 1234; - sinon.stub(element.$.restAPI, 'getLoggedIn') + sinon.stub(element.restApiService, 'getLoggedIn') .returns(Promise.resolve(true)); - sinon.stub(element.$.restAPI, 'getDiffComments') + sinon.stub(element.restApiService, 'getDiffComments') .returns(Promise.resolve({ 'foo.c': [{id: '123', message: 'foo bar', in_reply_to: '321'}], })); - sinon.stub(element.$.restAPI, 'getDiffRobotComments') + sinon.stub(element.restApiService, 'getDiffRobotComments') .returns(Promise.resolve({'foo.c': [{id: '321', message: 'done'}]})); - sinon.stub(element.$.restAPI, 'getDiffDrafts') + sinon.stub(element.restApiService, 'getDiffDrafts') .returns(Promise.resolve({'foo.c': [{id: '555', message: 'ack'}]})); return element.loadAll(changeNum).then(() => { - assert.isTrue(element.$.restAPI.getDiffComments.calledWithExactly( + assert.isTrue(element.restApiService.getDiffComments.calledWithExactly( changeNum)); - assert.isTrue(element.$.restAPI.getDiffRobotComments.calledWithExactly( - changeNum)); - assert.isTrue(element.$.restAPI.getDiffDrafts.calledWithExactly( + assert.isTrue( + element.restApiService.getDiffRobotComments.calledWithExactly( + changeNum)); + assert.isTrue(element.restApiService.getDiffDrafts.calledWithExactly( changeNum)); assert.isOk(element._changeComments._comments); assert.isOk(element._changeComments._robotComments); @@ -90,11 +92,11 @@ let robotCommentStub; let draftStub; setup(() => { - commentStub = sinon.stub(element.$.restAPI, 'getDiffComments') + commentStub = sinon.stub(element.restApiService, 'getDiffComments') .returns(Promise.resolve({})); - robotCommentStub = sinon.stub(element.$.restAPI, + robotCommentStub = sinon.stub(element.restApiService, 'getDiffRobotComments').returns(Promise.resolve({})); - draftStub = sinon.stub(element.$.restAPI, 'getDiffDrafts') + draftStub = sinon.stub(element.restApiService, 'getDiffDrafts') .returns(Promise.resolve({})); });
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor_test.js b/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor_test.js index 987a7d0..060001e 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-cursor/gr-diff-cursor_test.js
@@ -22,11 +22,11 @@ import {html} from '@polymer/polymer/lib/utils/html-tag.js'; import {listenOnce} from '../../../test/test-utils.js'; import {getMockDiffResponse} from '../../../test/mocks/diff-response.js'; +import {appContext} from '../../../services/app-context.js'; const basicFixture = fixtureFromTemplate(html` <gr-diff></gr-diff> <gr-diff-cursor></gr-diff-cursor> - <gr-rest-api-interface></gr-rest-api-interface> `); const emptyFixture = fixtureFromElement('div'); @@ -40,7 +40,7 @@ const fixtureElems = basicFixture.instantiate(); diffElement = fixtureElems[0]; cursorElement = fixtureElems[1]; - const restAPI = fixtureElems[2]; + const restAPI = appContext.restApiService; // Register the diff with the cursor. cursorElement.push('diffs', diffElement); @@ -539,7 +539,6 @@ <gr-diff></gr-diff> <gr-diff></gr-diff> <gr-diff-cursor></gr-diff-cursor> - <gr-rest-api-interface></gr-rest-api-interface> `); let diffElements; @@ -548,7 +547,7 @@ const fixtureElems = multiDiffFixture.instantiate(); diffElements = fixtureElems.slice(0, 3); cursorElement = fixtureElems[3]; - const restAPI = fixtureElems[4]; + const restAPI = appContext.restApiService; // Register the diff with the cursor. cursorElement.push('diffs', ...diffElements);
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts index 2223734..19aed90 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
@@ -60,7 +60,6 @@ DiffPreferencesInfo, IgnoreWhitespaceType, } from '../../../types/diff'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {JsApiService} from '../../shared/gr-js-api-interface/gr-js-api-types'; import {GrDiff, LineOfInterest} from '../gr-diff/gr-diff'; import {GrSyntaxLayer} from '../gr-syntax-layer/gr-syntax-layer'; @@ -110,7 +109,6 @@ export interface GrDiffHost { $: { - restAPI: RestApiService & Element; jsAPI: JsApiService & Element; syntaxLayer: GrSyntaxLayer & Element; diff: GrDiff; @@ -261,6 +259,8 @@ private readonly flags = appContext.flagsService; + private readonly restApiService = appContext.restApiService; + /** @override */ created() { super.created(); @@ -508,7 +508,7 @@ if (!this.changeNum) throw new Error('Missing required "changeNum" prop.'); if (!this.patchRange) throw new Error('Missing required "patchRange".'); if (!this.path) throw new Error('Missing required "path" property.'); - return this.$.restAPI + return this.restApiService .getBlame(this.changeNum, this.patchRange.patchNum, this.path, true) .then(blame => { if (!blame || !blame.length) { @@ -542,7 +542,7 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _canReload() { @@ -575,7 +575,7 @@ if (!this.changeNum) throw new Error('Missing required "changeNum".'); if (!this.patchRange) throw new Error('Missing required "patchRange".'); if (!this.path) throw new Error('Missing required "path" property.'); - this.$.restAPI + this.restApiService .getDiff( this.changeNum, this.patchRange.basePatchNum, @@ -697,7 +697,7 @@ _getImages(diff: DiffInfo) { if (!this.changeNum) throw new Error('Missing required "changeNum" prop.'); if (!this.patchRange) throw new Error('Missing required "patchRange".'); - return this.$.restAPI.getImagesForDiff( + return this.restApiService.getImagesForDiff( this.changeNum, diff, this.patchRange
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_html.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_html.ts index 9921dd6..48b82ec 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_html.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_html.ts
@@ -50,5 +50,4 @@ diff="[[diff]]" ></gr-syntax-layer> <gr-js-api-interface id="jsAPI"></gr-js-api-interface> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js index 402cb52..fe6c7b9 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.js
@@ -133,11 +133,11 @@ resolve => { notifySyntaxProcessed = resolve; })); - sinon.stub(element.$.restAPI, 'getDiff').returns( + sinon.stub(element.restApiService, 'getDiff').returns( Promise.resolve({content: []})); element.patchRange = {}; element.change = createChange(); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; return element.reload(true); }); @@ -154,7 +154,7 @@ }); test('ends total timer w/ no syntax layer processing', async () => { - sinon.stub(element.$.restAPI, 'getDiff').returns( + sinon.stub(element.restApiService, 'getDiff').returns( Promise.resolve({content: []})); element.patchRange = {}; element.change = createChange(); @@ -176,12 +176,12 @@ resolve => { notifySyntaxProcessed = resolve; })); - sinon.stub(element.$.restAPI, 'getDiff').returns( + sinon.stub(element.restApiService, 'getDiff').returns( Promise.resolve({content: []})); element.patchRange = {}; element.change = createChange(); let reloadComplete = false; - element.$.restAPI.getDiffPreferences() + element.restApiService.getDiffPreferences() .then(prefs => { element.prefs = prefs; return element.reload(); @@ -230,7 +230,7 @@ test('reload() loads files weblinks', () => { const weblinksStub = sinon.stub(GerritNav, '_generateWeblinks') .returns({name: 'stubb', url: '#s'}); - sinon.stub(element.$.restAPI, 'getDiff').returns(Promise.resolve({ + sinon.stub(element.restApiService, 'getDiff').returns(Promise.resolve({ content: [], })); element.projectName = 'test-project'; @@ -263,7 +263,7 @@ }); test('prefetch getDiff', done => { - const diffRestApiStub = sinon.stub(element.$.restAPI, 'getDiff') + const diffRestApiStub = sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve({content: []})); element.changeNum = 123; element.patchRange = {basePatchNum: 1, patchNum: 2}; @@ -288,7 +288,7 @@ test('reload resolves on error', () => { const onErrStub = sinon.stub(element, '_handleGetDiffError'); const error = new Response(null, {ok: false, status: 500}); - sinon.stub(element.$.restAPI, 'getDiff').callsFake( + sinon.stub(element.restApiService, 'getDiff').callsFake( (changeNum, basePatchNum, patchNum, path, whitespace, onErr) => { onErr(error); }); @@ -347,7 +347,7 @@ 'wsAAAAAAAAAAAAA/////w==', type: 'image/bmp', }; - sinon.stub(element.$.restAPI, + sinon.stub(element.restApiService, 'getB64FileContents') .callsFake( (changeId, patchNum, path, opt_parentIndex) => Promise.resolve( @@ -380,7 +380,7 @@ content: [{skip: 66}], binary: true, }; - sinon.stub(element.$.restAPI, 'getDiff') + sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve(mockDiff)); const rendered = () => { @@ -438,7 +438,7 @@ element.addEventListener('render', rendered); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; element.reload(); }); @@ -461,7 +461,7 @@ content: [{skip: 66}], binary: true, }; - sinon.stub(element.$.restAPI, 'getDiff') + sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve(mockDiff)); const rendered = () => { @@ -521,7 +521,7 @@ element.addEventListener('render', rendered); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; element.reload(); }); @@ -543,7 +543,7 @@ content: [{skip: 66}], binary: true, }; - sinon.stub(element.$.restAPI, 'getDiff') + sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve(mockDiff)); element.addEventListener('render', () => { @@ -562,7 +562,7 @@ done(); }); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; element.reload(); }); @@ -584,7 +584,7 @@ content: [{skip: 66}], binary: true, }; - sinon.stub(element.$.restAPI, 'getDiff') + sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve(mockDiff)); element.addEventListener('render', () => { @@ -603,7 +603,7 @@ done(); }); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; element.reload(); }); @@ -627,7 +627,7 @@ }; mockFile1.type = 'image/jpeg-evil'; - sinon.stub(element.$.restAPI, 'getDiff') + sinon.stub(element.restApiService, 'getDiff') .returns(Promise.resolve(mockDiff)); element.addEventListener('render', () => { @@ -641,7 +641,7 @@ done(); }); - element.$.restAPI.getDiffPreferences().then(prefs => { + element.restApiService.getDiffPreferences().then(prefs => { element.prefs = prefs; element.reload(); }); @@ -702,7 +702,7 @@ const mockBlame = [{id: 'commit id', ranges: [{start: 1, end: 2}]}]; const showAlertStub = sinon.stub(); element.addEventListener('show-alert', showAlertStub); - const getBlameStub = sinon.stub(element.$.restAPI, 'getBlame') + const getBlameStub = sinon.stub(element.restApiService, 'getBlame') .returns(Promise.resolve(mockBlame)); element.changeNum = 42; element.patchRange = {patchNum: 5, basePatchNum: 4}; @@ -720,7 +720,7 @@ const mockBlame = []; const showAlertStub = sinon.stub(); element.addEventListener('show-alert', showAlertStub); - sinon.stub(element.$.restAPI, 'getBlame') + sinon.stub(element.restApiService, 'getBlame') .returns(Promise.resolve(mockBlame)); element.changeNum = 42; element.patchRange = {patchNum: 5, basePatchNum: 4}; @@ -1270,7 +1270,7 @@ test('starts syntax layer processing on render event', async () => { sinon.stub(element.$.syntaxLayer, 'process') .returns(Promise.resolve()); - sinon.stub(element.$.restAPI, 'getDiff').returns( + sinon.stub(element.restApiService, 'getDiff').returns( Promise.resolve({content: []})); element.reload(); await flush();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts index e0333cc..c30feeb 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts
@@ -20,7 +20,6 @@ import '../../shared/gr-button/gr-button'; import '../../shared/gr-rest-api-interface/gr-rest-api-interface'; import {DiffViewMode} from '../../../constants/constants'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners'; import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin'; import {PolymerElement} from '@polymer/polymer/polymer-element'; @@ -28,12 +27,7 @@ import {customElement, property} from '@polymer/decorators'; import {IronA11yAnnouncer} from '@polymer/iron-a11y-announcer/iron-a11y-announcer'; import {FixIronA11yAnnouncer} from '../../../types/types'; - -export interface GrDiffModeSelector { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; @customElement('gr-diff-mode-selector') export class GrDiffModeSelector extends GestureEventListeners( @@ -53,6 +47,8 @@ @property({type: Boolean}) saveOnChange = false; + private readonly restApiService = appContext.restApiService; + attached() { ((IronA11yAnnouncer as unknown) as FixIronA11yAnnouncer).requestAvailability(); } @@ -62,7 +58,7 @@ */ setMode(newMode: DiffViewMode) { if (this.saveOnChange && this.mode && this.mode !== newMode) { - this.$.restAPI.savePreferences({diff_view: newMode}); + this.restApiService.savePreferences({diff_view: newMode}); } this.mode = newMode; let annoucement;
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts index a5bf269..9943b58 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_html.ts
@@ -52,5 +52,4 @@ > <iron-icon icon="gr-icons:unified"></iron-icon> </gr-button> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js index 07a1d16..049f01d 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector_test.js
@@ -40,7 +40,7 @@ }); test('setMode', () => { - const saveStub = sinon.stub(element.$.restAPI, 'savePreferences'); + const saveStub = sinon.stub(element.restApiService, 'savePreferences'); // Setting the mode initially does not save prefs. element.saveOnChange = true;
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts index 984b05a..82c48fa 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts
@@ -59,7 +59,6 @@ } from '../../../utils/path-list-util'; import {changeBaseURL, changeIsOpen} from '../../../utils/change-util'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrDiffHost} from '../gr-diff-host/gr-diff-host'; import { DropdownItem, @@ -116,7 +115,6 @@ export interface GrDiffView { $: { - restAPI: RestApiService & Element; commentAPI: GrCommentApi; cursor: GrDiffCursor; diffHost: GrDiffHost; @@ -319,6 +317,8 @@ flagsService = appContext.flagsService; + private readonly restApiService = appContext.restApiService; + _throttledToggleFileReviewed?: EventListener; _onRenderHandler?: EventListener; @@ -354,19 +354,19 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } @observe('_change.project') _getProjectConfig(project?: RepoName) { if (!project) return; - return this.$.restAPI.getProjectConfig(project).then(config => { + return this.restApiService.getProjectConfig(project).then(config => { this._projectConfig = config; }); } _getChangeDetail(changeNum: NumericChangeId) { - return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => { + return this.restApiService.getDiffChangeDetail(changeNum).then(change => { if (!change) throw new Error('Missing "change" in API response.'); this._change = change; return change; @@ -375,7 +375,7 @@ _getChangeEdit() { if (!this._changeNum) throw new Error('Missing this._changeNum'); - return this.$.restAPI.getChangeEdit(this._changeNum); + return this.restApiService.getChangeEdit(this._changeNum); } _getSortedFileList(files?: Files) { @@ -413,7 +413,7 @@ } const patchRange = patchRangeRecord.base; - return this.$.restAPI + return this.restApiService .getChangeFiles(changeNum, patchRange) .then(changeFiles => { if (!changeFiles) return; @@ -428,13 +428,13 @@ } _getDiffPreferences() { - return this.$.restAPI.getDiffPreferences().then(prefs => { + return this.restApiService.getDiffPreferences().then(prefs => { this._prefs = prefs; }); } _getPreferences() { - return this.$.restAPI.getPreferences(); + return this.restApiService.getPreferences(); } _getWindowWidth() { @@ -461,7 +461,7 @@ if (!this._changeNum) return Promise.resolve(undefined); if (!this._patchRange?.patchNum) return Promise.resolve(undefined); if (!this._path) return Promise.resolve(undefined); - return this.$.restAPI.saveFileReviewed( + return this.restApiService.saveFileReviewed( this._changeNum, this._patchRange?.patchNum, this._path, @@ -843,10 +843,12 @@ patchNum?: PatchSetNum ): Promise<Set<string>> { if (!changeNum || !patchNum) return Promise.resolve(new Set<string>()); - return this.$.restAPI.getReviewedFiles(changeNum, patchNum).then(files => { - this._reviewedFiles = new Set(files); - return this._reviewedFiles; - }); + return this.restApiService + .getReviewedFiles(changeNum, patchNum) + .then(files => { + this._reviewedFiles = new Set(files); + return this._reviewedFiles; + }); } _getReviewedStatus( @@ -1031,7 +1033,7 @@ this._focusLineNum = undefined; if (value.changeNum && value.project) { - this.$.restAPI.setInProjectLookup(value.changeNum, value.project); + this.restApiService.setInProjectLookup(value.changeNum, value.project); } this._changeNum = value.changeNum; @@ -1141,7 +1143,7 @@ _changeViewStateChanged(changeViewState: Partial<ChangeViewState>) { if (changeViewState.diffMode === null) { // If screen size is small, always default to unified view. - this.$.restAPI.getPreferences().then(prefs => { + this.restApiService.getPreferences().then(prefs => { if (prefs) { this.set('changeViewState.diffMode', prefs.default_diff_view); } @@ -1583,7 +1585,7 @@ _getDiffDrafts() { if (!this._changeNum) throw new Error('Missing this._changeNum'); - return this.$.restAPI.getDiffDrafts(this._changeNum); + return this.restApiService.getDiffDrafts(this._changeNum); } _computeCommentSkips(
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts index be2dce5..9ffb7df 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_html.ts
@@ -425,7 +425,6 @@ on-reload-diff-preference="_handleReloadingDiffPreference" > </gr-diff-preferences-dialog> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> <gr-diff-cursor id="cursor"
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js index 8e1e5c1..cee6567 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js +++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.js
@@ -334,8 +334,8 @@ sinon.stub(element, '_loadBlame'); sinon.stub(element.$.diffHost, 'reload').returns(Promise.resolve()); sinon.spy(element, '_paramsChanged'); - element.$.restAPI.getDiffChangeDetail.restore(); - sinon.stub(element.$.restAPI, 'getDiffChangeDetail') + element.restApiService.getDiffChangeDetail.restore(); + sinon.stub(element.restApiService, 'getDiffChangeDetail') .returns( Promise.resolve({ ...createChange(), @@ -1233,7 +1233,7 @@ const prefsPromise = new Promise(resolve => { resolvePrefs = resolve; }); - sinon.stub(element.$.restAPI, 'getPreferences') + sinon.stub(element.restApiService, 'getPreferences') .callsFake(() => prefsPromise); // Attach a new gr-diff-view so we can intercept the preferences fetch. @@ -1622,9 +1622,9 @@ test('_getReviewedStatus', () => { const promises = []; - element.$.restAPI.getReviewedFiles.restore(); + element.restApiService.getReviewedFiles.restore(); - sinon.stub(element.$.restAPI, 'getReviewedFiles') + sinon.stub(element.restApiService, 'getReviewedFiles') .returns(Promise.resolve(['path'])); promises.push(element._getReviewedStatus(true, null, null, 'path') @@ -1689,7 +1689,7 @@ test('_paramsChanged sets in projectLookup', () => { sinon.stub(element, '_initLineOfInterestAndCursor'); - const setStub = sinon.stub(element.$.restAPI, 'setInProjectLookup'); + const setStub = sinon.stub(element.restApiService, 'setInProjectLookup'); element._paramsChanged({ view: GerritNav.View.DIFF, changeNum: 101,
diff --git a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts index 79c4359..c04e61b 100644 --- a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts +++ b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search.ts
@@ -28,15 +28,10 @@ } from '../../../mixins/gr-list-view-mixin/gr-list-view-mixin'; import {getBaseUrl} from '../../../utils/url-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {DocResult} from '../../../types/common'; import {fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; -export interface GrDocumentationSearch { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-documentation-search') export class GrDocumentationSearch extends ListViewMixin( GestureEventListeners(LegacyElementMixin(PolymerElement)) @@ -60,6 +55,8 @@ @property({type: String}) _filter = ''; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -75,14 +72,16 @@ _getDocumentationSearches(filter: string) { this._documentationSearches = []; - return this.$.restAPI.getDocumentationSearches(filter).then(searches => { - // Late response. - if (filter !== this._filter || !searches) { - return; - } - this._documentationSearches = searches; - this._loading = false; - }); + return this.restApiService + .getDocumentationSearches(filter) + .then(searches => { + // Late response. + if (filter !== this._filter || !searches) { + return; + } + this._documentationSearches = searches; + this._loading = false; + }); } _computeSearchUrl(url?: string) {
diff --git a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_html.ts b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_html.ts index 9f5aae3..dd1faeb 100644 --- a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_html.ts +++ b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_html.ts
@@ -54,5 +54,4 @@ </tbody> </table> </gr-list-view> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_test.js b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_test.js index ce80f2f..79d40b5 100644 --- a/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_test.js +++ b/polygerrit-ui/app/elements/documentation/gr-documentation-search/gr-documentation-search_test.js
@@ -72,14 +72,14 @@ test('_paramsChanged', done => { sinon.stub( - element.$.restAPI, + element.restApiService, 'getDocumentationSearches') .callsFake(() => Promise.resolve(documentationSearches)); const value = { filter: 'test', }; element._paramsChanged(value).then(() => { - assert.isTrue(element.$.restAPI.getDocumentationSearches.lastCall + assert.isTrue(element.restApiService.getDocumentationSearches.lastCall .calledWithExactly('test')); done(); });
diff --git a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls.ts b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls.ts index cf011bb..f05080e 100644 --- a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls.ts +++ b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls.ts
@@ -33,15 +33,14 @@ import {ChangeInfo, PatchSetNum} from '../../../types/common'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {GrDialog} from '../../shared/gr-dialog/gr-dialog'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AutocompleteQuery, AutocompleteSuggestion, } from '../../shared/gr-autocomplete/gr-autocomplete'; +import {appContext} from '../../../services/app-context'; export interface GrEditControls { $: { - restAPI: RestApiService & Element; overlay: GrOverlay; openDialog: GrDialog; deleteDialog: GrDialog; @@ -79,6 +78,8 @@ @property({type: Object}) _query: AutocompleteQuery; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this._query = (input: string) => this._queryFiles(input); @@ -221,7 +222,7 @@ this._closeDialog(this.$.openDialog, true); return; } - return this.$.restAPI + return this.restApiService .saveFileUploadChangeEdit(this.change._number, path, fileData) .then(res => { if (!res || !res.ok) { @@ -236,7 +237,7 @@ // Get the dialog before the api call as the event will change during bubbling // which will make Polymer.dom(e).path an empty array in polymer 2 const dialog = this._getDialogFromEvent(e); - this.$.restAPI + this.restApiService .deleteFileInChangeEdit(this.change._number, this._path) .then(res => { if (!res || !res.ok) { @@ -249,7 +250,7 @@ _handleRestoreConfirm(e: Event) { const dialog = this._getDialogFromEvent(e); - this.$.restAPI + this.restApiService .restoreFileInChangeEdit(this.change._number, this._path) .then(res => { if (!res || !res.ok) { @@ -262,7 +263,7 @@ _handleRenameConfirm(e: Event) { const dialog = this._getDialogFromEvent(e); - return this.$.restAPI + return this.restApiService .renameFileInChangeEdit(this.change._number, this._path, this._newPath) .then(res => { if (!res || !res.ok) { @@ -274,7 +275,7 @@ } _queryFiles(input: string): Promise<AutocompleteSuggestion[]> { - return this.$.restAPI + return this.restApiService .queryChangeFiles(this.change._number, this.patchNum, input) .then(res => { if (!res) throw new Error('Failed to retrieve files. Reponse not set.');
diff --git a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_html.ts b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_html.ts index b67f6cd..eac796e 100644 --- a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_html.ts +++ b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_html.ts
@@ -179,5 +179,4 @@ </div> </gr-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.js b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.js index 464c13f..e366233 100644 --- a/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.js +++ b/polygerrit-ui/app/elements/edit/gr-edit-controls/gr-edit-controls_test.js
@@ -35,7 +35,7 @@ showDialogSpy = sinon.spy(element, '_showDialog'); closeDialogSpy = sinon.spy(element, '_closeDialog'); sinon.stub(element, '_hideAllDialogs'); - queryStub = sinon.stub(element.$.restAPI, 'queryChangeFiles') + queryStub = sinon.stub(element.restApiService, 'queryChangeFiles') .returns(Promise.resolve([])); flush(); }); @@ -114,7 +114,7 @@ setup(() => { navStub = sinon.stub(GerritNav, 'navigateToChange'); - deleteStub = sinon.stub(element.$.restAPI, 'deleteFileInChangeEdit'); + deleteStub = sinon.stub(element.restApiService, 'deleteFileInChangeEdit'); deleteAutocomplete = element.$.deleteDialog.querySelector('gr-autocomplete'); }); @@ -198,7 +198,7 @@ setup(() => { navStub = sinon.stub(GerritNav, 'navigateToChange'); - renameStub = sinon.stub(element.$.restAPI, 'renameFileInChangeEdit'); + renameStub = sinon.stub(element.restApiService, 'renameFileInChangeEdit'); renameAutocomplete = element.$.renameDialog.querySelector('gr-autocomplete'); }); @@ -291,7 +291,8 @@ setup(() => { navStub = sinon.stub(GerritNav, 'navigateToChange'); - restoreStub = sinon.stub(element.$.restAPI, 'restoreFileInChangeEdit'); + restoreStub = sinon.stub(element.restApiService, + 'restoreFileInChangeEdit'); }); test('restore hidden by default', () => { @@ -355,7 +356,7 @@ setup(() => { navStub = sinon.stub(GerritNav, 'navigateToChange'); - fileStub = sinon.stub(element.$.restAPI, 'saveFileUploadChangeEdit'); + fileStub = sinon.stub(element.restApiService, 'saveFileUploadChangeEdit'); }); test('_handleUploadConfirm', () => {
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts index 60944d0..83840a5f 100644 --- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts +++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view.ts
@@ -34,10 +34,7 @@ import {SPECIAL_PATCH_SET_NUM} from '../../../utils/patch-set-util'; import {computeTruncatedPath} from '../../../utils/path-list-util'; import {customElement, property} from '@polymer/decorators'; -import { - RestApiService, - ErrorCallback, -} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {ErrorCallback} from '../../../services/services/gr-rest-api/gr-rest-api'; import { ChangeInfo, PatchSetNum, @@ -48,6 +45,7 @@ import {GrStorage} from '../../shared/gr-storage/gr-storage'; import {HttpMethod, NotifyType} from '../../../constants/constants'; import {fireAlert, fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const RESTORED_MESSAGE = 'Content restored from a previous edit.'; const SAVING_MESSAGE = 'Saving changes...'; @@ -60,7 +58,6 @@ export interface GrEditorView { $: { - restAPI: RestApiService & Element; storage: GrStorage; }; } @@ -126,6 +123,8 @@ @property({type: Number}) _lineNum?: number; + private readonly restApiService = appContext.restApiService; + get keyBindings() { return { 'ctrl+s meta+s': '_handleSaveShortcut', @@ -153,11 +152,11 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _getEditPrefs() { - return this.$.restAPI.getEditPreferences(); + return this.restApiService.getEditPreferences(); } _paramsChanged(value: GenerateUrlEditViewParameters) { @@ -190,7 +189,7 @@ } _getChangeDetail(changeNum: NumericChangeId) { - return this.$.restAPI.getDiffChangeDetail(changeNum).then(change => { + return this.restApiService.getDiffChangeDetail(changeNum).then(change => { this._change = change; }); } @@ -204,7 +203,7 @@ if (path === this._path) { return Promise.resolve(); } - return this.$.restAPI + return this.restApiService .renameFileInChangeEdit(this._changeNum, this._path, path) .then(res => { if (!res || !res.ok) { @@ -241,7 +240,7 @@ this.storageKey ); - return this.$.restAPI + return this.restApiService .getFileContent(changeNum, path, patchNum) .then(res => { const content = (res && (res as Base64FileContent).content) || ''; @@ -278,7 +277,7 @@ this.$.storage.eraseEditableContentItem(this.storageKey); if (!this._newContent) return Promise.reject(new Error('new content undefined')); - return this.$.restAPI + return this.restApiService .saveChangeEdit(this._changeNum, this._path, this._newContent) .then(res => { this._saving = false; @@ -336,7 +335,7 @@ this._showAlert(PUBLISHING_EDIT_MSG); - this.$.restAPI + this.restApiService .executeChangeAction( changeNum, HttpMethod.POST,
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_html.ts b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_html.ts index 1e05232..0b03856 100644 --- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_html.ts +++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_html.ts
@@ -133,6 +133,5 @@ ></gr-default-editor> </gr-endpoint-decorator> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> `;
diff --git a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.js b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.js index b04277e..419e63e 100644 --- a/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.js +++ b/polygerrit-ui/app/elements/edit/gr-editor-view/gr-editor-view_test.js
@@ -43,9 +43,10 @@ }); element = basicFixture.instantiate(); - savePathStub = sinon.stub(element.$.restAPI, 'renameFileInChangeEdit'); - saveFileStub = sinon.stub(element.$.restAPI, 'saveChangeEdit'); - changeDetailStub = sinon.stub(element.$.restAPI, 'getDiffChangeDetail'); + savePathStub = sinon.stub(element.restApiService, 'renameFileInChangeEdit'); + saveFileStub = sinon.stub(element.restApiService, 'saveChangeEdit'); + changeDetailStub = sinon.stub(element.restApiService, + 'getDiffChangeDetail'); navigateStub = sinon.stub(element, '_viewEditInChangeView'); }); @@ -199,7 +200,7 @@ const saveSpy = sinon.spy(element, '_saveEdit'); const alertStub = sinon.stub(element, '_showAlert'); const changeActionsStub = - sinon.stub(element.$.restAPI, 'executeChangeAction'); + sinon.stub(element.restApiService, 'executeChangeAction'); saveFileStub.returns(Promise.resolve({ok: true})); element._newContent = newText; flush(); @@ -255,7 +256,7 @@ }); test('res.ok', () => { - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({ ok: true, type: 'text/javascript', @@ -271,7 +272,7 @@ }); test('!res.ok', () => { - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({})); // Ensure no data is set with a bad response. @@ -283,7 +284,7 @@ }); test('content is undefined', () => { - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({ ok: true, type: 'text/javascript', @@ -297,7 +298,7 @@ }); test('content and type is undefined', () => { - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({ ok: true, })); @@ -382,7 +383,7 @@ test('local edit exists', () => { sinon.stub(element.$.storage, 'getEditableContentItem') .returns({message: 'pending edit'}); - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({ ok: true, type: 'text/javascript', @@ -405,7 +406,7 @@ test('local edit exists, is same as remote edit', () => { sinon.stub(element.$.storage, 'getEditableContentItem') .returns({message: 'pending edit'}); - sinon.stub(element.$.restAPI, 'getFileContent') + sinon.stub(element.restApiService, 'getFileContent') .returns(Promise.resolve({ ok: true, type: 'text/javascript',
diff --git a/polygerrit-ui/app/elements/gr-app-element.ts b/polygerrit-ui/app/elements/gr-app-element.ts index 6df7cad..4cc0389 100644 --- a/polygerrit-ui/app/elements/gr-app-element.ts +++ b/polygerrit-ui/app/elements/gr-app-element.ts
@@ -53,7 +53,6 @@ import {appContext} from '../services/app-context'; import {flush} from '@polymer/polymer/lib/utils/flush'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../services/services/gr-rest-api/gr-rest-api'; import {GrRouter} from './core/gr-router/gr-router'; import { AccountDetailInfo, @@ -89,7 +88,6 @@ export interface GrAppElement { $: { - restAPI: RestApiService & Element; router: GrRouter; errorManager: GrErrorManager; errorView: HTMLDivElement; @@ -195,6 +193,8 @@ private reporting = appContext.reportingService; + private restApiService = appContext.restApiService; + keyboardShortcuts() { return { [Shortcut.OPEN_SHORTCUT_HELP_DIALOG]: '_showKeyboardShortcuts', @@ -238,19 +238,19 @@ this.reporting.appStarted(); this.$.router.start(); - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { this._account = account; const role = account ? 'user' : 'guest'; this.reporting.reportLifeCycle(`Started as ${role}`); }); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._serverConfig = config; if (config && config.gerrit && config.gerrit.report_bug_url) { this._feedbackUrl = config.gerrit.report_bug_url; } }); - this.$.restAPI.getVersion().then(version => { + this.restApiService.getVersion().then(version => { this._version = version; this._logWelcome(); }); @@ -440,9 +440,9 @@ if (!account) return; // Preferences are cached when a user is logged in; warm them. - this.$.restAPI.getPreferences(); - this.$.restAPI.getDiffPreferences(); - this.$.restAPI.getEditPreferences(); + this.restApiService.getPreferences(); + this.restApiService.getDiffPreferences(); + this.restApiService.getEditPreferences(); this.$.errorManager.knownAccountId = (this._account && this._account._account_id) || null; }
diff --git a/polygerrit-ui/app/elements/gr-app-element_html.ts b/polygerrit-ui/app/elements/gr-app-element_html.ts index 88cd7f5..b978ed8 100644 --- a/polygerrit-ui/app/elements/gr-app-element_html.ts +++ b/polygerrit-ui/app/elements/gr-app-element_html.ts
@@ -218,7 +218,6 @@ id="errorManager" login-url="[[_loginUrl]]" ></gr-error-manager> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-router id="router"></gr-router> <gr-plugin-host id="plugins" config="[[_serverConfig]]"> </gr-plugin-host> <gr-lib-loader id="libLoader"></gr-lib-loader>
diff --git a/polygerrit-ui/app/elements/gr-app_test.js b/polygerrit-ui/app/elements/gr-app_test.js index 4c5e965..013d9387 100644 --- a/polygerrit-ui/app/elements/gr-app_test.js +++ b/polygerrit-ui/app/elements/gr-app_test.js
@@ -70,7 +70,7 @@ }); test('passes config to gr-plugin-host', () => { - const config = appElement().$.restAPI.getConfig; + const config = appElement().restApiService.getConfig; return config.lastCall.returnValue.then(config => { assert.deepEqual(appElement().$.plugins.config, config); });
diff --git a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.ts b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.ts index 9c781c8..a7b6a6c 100644 --- a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.ts +++ b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info.ts
@@ -26,14 +26,9 @@ import {htmlTemplate} from './gr-account-info_html'; import {customElement, property, observe} from '@polymer/decorators'; import {AccountInfo, ServerInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {EditableAccountField} from '../../../constants/constants'; +import {appContext} from '../../../services/app-context'; -export interface GrAccountInfo { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-account-info') export class GrAccountInfo extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -101,19 +96,21 @@ @property({type: String}) _avatarChangeUrl = ''; + private readonly restApiService = appContext.restApiService; + loadData() { const promises = []; this._loading = true; promises.push( - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._serverConfig = config; }) ); promises.push( - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { if (!account) return; this._hasNameChange = false; this._hasUsernameChange = false; @@ -128,7 +125,7 @@ ); promises.push( - this.$.restAPI.getAvatarChangeUrl().then(url => { + this.restApiService.getAvatarChangeUrl().then(url => { this._avatarChangeUrl = url || ''; }) ); @@ -168,7 +165,7 @@ // Note that we are intentionally not acting on this._account.name being the // empty string (which is falsy). return this._hasNameChange && this.nameMutable && this._account?.name - ? this.$.restAPI.setAccountName(this._account.name) + ? this.restApiService.setAccountName(this._account.name) : Promise.resolve(); } @@ -176,20 +173,20 @@ // Note that we are intentionally not acting on this._username being the // empty string (which is falsy). return this._hasUsernameChange && this.usernameMutable && this._username - ? this.$.restAPI.setAccountUsername(this._username) + ? this.restApiService.setAccountUsername(this._username) : Promise.resolve(); } _maybeSetDisplayName() { return this._hasDisplayNameChange && this._account?.display_name !== undefined - ? this.$.restAPI.setAccountDisplayName(this._account.display_name) + ? this.restApiService.setAccountDisplayName(this._account.display_name) : Promise.resolve(); } _maybeSetStatus() { return this._hasStatusChange && this._account?.status !== undefined - ? this.$.restAPI.setAccountStatus(this._account.status) + ? this.restApiService.setAccountStatus(this._account.status) : Promise.resolve(); }
diff --git a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_html.ts b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_html.ts index d69a279..f207876 100644 --- a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_html.ts
@@ -128,5 +128,4 @@ </span> </section> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.js b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.js index d359ad2..a92c023 100644 --- a/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.js +++ b/polygerrit-ui/app/elements/settings/gr-account-info/gr-account-info_test.js
@@ -133,11 +133,12 @@ element.set('_serverConfig', {auth: {editable_account_fields: ['FULL_NAME', 'USER_NAME']}}); - nameStub = sinon.stub(element.$.restAPI, 'setAccountName').callsFake( + nameStub = sinon.stub(element.restApiService, 'setAccountName').callsFake( name => Promise.resolve()); - usernameStub = sinon.stub(element.$.restAPI, 'setAccountUsername') + usernameStub = sinon.stub(element.restApiService, 'setAccountUsername') .callsFake(username => Promise.resolve()); - statusStub = sinon.stub(element.$.restAPI, 'setAccountStatus').callsFake( + statusStub = sinon.stub(element.restApiService, + 'setAccountStatus').callsFake( status => Promise.resolve()); }); @@ -217,11 +218,12 @@ element.set('_serverConfig', {auth: {editable_account_fields: ['FULL_NAME']}}); - nameStub = sinon.stub(element.$.restAPI, 'setAccountName').callsFake( + nameStub = sinon.stub(element.restApiService, 'setAccountName').callsFake( name => Promise.resolve()); - statusStub = sinon.stub(element.$.restAPI, 'setAccountStatus').callsFake( + statusStub = sinon.stub(element.restApiService, + 'setAccountStatus').callsFake( status => Promise.resolve()); - sinon.stub(element.$.restAPI, 'setAccountUsername').callsFake( + sinon.stub(element.restApiService, 'setAccountUsername').callsFake( username => Promise.resolve()); }); @@ -261,7 +263,8 @@ element.set('_serverConfig', {auth: {editable_account_fields: []}}); - statusStub = sinon.stub(element.$.restAPI, 'setAccountStatus').callsFake( + statusStub = sinon.stub(element.restApiService, + 'setAccountStatus').callsFake( status => Promise.resolve()); });
diff --git a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list.ts b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list.ts index 5523be1..243a40d 100644 --- a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list.ts +++ b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list.ts
@@ -24,14 +24,9 @@ import {htmlTemplate} from './gr-agreements-list_html'; import {getBaseUrl} from '../../../utils/url-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {ContributorAgreementInfo} from '../../../types/common'; +import {appContext} from '../../../services/app-context'; -export interface GrAgreementsList { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-agreements-list') export class GrAgreementsList extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -43,6 +38,8 @@ @property({type: Array}) _agreements?: ContributorAgreementInfo[]; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -50,7 +47,7 @@ } loadData() { - return this.$.restAPI.getAccountAgreements().then(agreements => { + return this.restApiService.getAccountAgreements().then(agreements => { this._agreements = agreements; }); }
diff --git a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_html.ts b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_html.ts index 194ca2b..1afac0d 100644 --- a/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-agreements-list/gr-agreements-list_html.ts
@@ -52,5 +52,4 @@ </table> <a href$="[[getUrl()]]">New Contributor Agreement</a> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view.ts b/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view.ts index 891fdf6..2e4cb8c 100644 --- a/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view.ts +++ b/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view.ts
@@ -25,7 +25,6 @@ import {PolymerElement} from '@polymer/polymer/polymer-element'; import {htmlTemplate} from './gr-cla-view_html'; import {getBaseUrl} from '../../../utils/url-util'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {customElement, property} from '@polymer/decorators'; import { ServerInfo, @@ -33,12 +32,7 @@ ContributorAgreementInfo, } from '../../../types/common'; import {fireAlert, fireTitleChange} from '../../../utils/event-util'; - -export interface GrClaView { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -75,6 +69,8 @@ @property({type: String}) _agreementsUrl?: string; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -86,13 +82,13 @@ loadData() { const promises = []; promises.push( - this.$.restAPI.getConfig(true).then(config => { + this.restApiService.getConfig(true).then(config => { this._serverConfig = config; }) ); promises.push( - this.$.restAPI.getAccountGroups().then(groups => { + this.restApiService.getAccountGroups().then(groups => { if (!groups) return; this._groups = groups.sort((a, b) => (a.name || '').localeCompare(b.name || '') @@ -101,7 +97,7 @@ ); promises.push( - this.$.restAPI + this.restApiService .getAccountAgreements() .then((agreements: ContributorAgreementInfo[] | undefined) => { this._signedAgreements = agreements || []; @@ -138,7 +134,7 @@ this._createToast('Agreement saving...'); const name = this._agreementName; - return this.$.restAPI.saveAccountAgreement({name}).then(res => { + return this.restApiService.saveAccountAgreement({name}).then(res => { let message = 'Agreement failed to be submitted, please try again'; if (res.status === 200) { message = 'Agreement has been successfully submitted.';
diff --git a/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view_html.ts b/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view_html.ts index c461718..91ca402 100644 --- a/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-cla-view/gr-cla-view_html.ts
@@ -122,5 +122,4 @@ </div> </div> </main> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences.ts b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences.ts index d49cb5a..da99583 100644 --- a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences.ts +++ b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences.ts
@@ -24,12 +24,11 @@ import {PolymerElement} from '@polymer/polymer/polymer-element'; import {htmlTemplate} from './gr-edit-preferences_html'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {EditPreferencesInfo} from '../../../types/common'; +import {appContext} from '../../../services/app-context'; export interface GrEditPreferences { $: { - restAPI: RestApiService & Element; editSyntaxHighlighting: HTMLInputElement; showAutoCloseBrackets: HTMLInputElement; showIndentWithTabs: HTMLInputElement; @@ -52,8 +51,10 @@ @property({type: Object}) editPrefs?: EditPreferencesInfo; + private readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getEditPreferences().then(prefs => { + return this.restApiService.getEditPreferences().then(prefs => { this.editPrefs = prefs; }); } @@ -101,7 +102,7 @@ save() { if (!this.editPrefs) return Promise.reject(new Error('Missing edit preferences')); - return this.$.restAPI.saveEditPreferences(this.editPrefs).then(() => { + return this.restApiService.saveEditPreferences(this.editPrefs).then(() => { this.hasUnsavedChanges = false; }); }
diff --git a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_html.ts b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_html.ts index 47e4592..bcff4df 100644 --- a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_html.ts
@@ -160,5 +160,4 @@ </span> </section> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_test.js b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_test.js index b1b8b61..01c6861 100644 --- a/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_test.js +++ b/polygerrit-ui/app/elements/settings/gr-edit-preferences/gr-edit-preferences_test.js
@@ -92,7 +92,7 @@ }); test('save changes', () => { - sinon.stub(element.$.restAPI, 'saveEditPreferences') + sinon.stub(element.restApiService, 'saveEditPreferences') .returns(Promise.resolve()); const showTabsCheckbox = valueOf('Show tabs', 'editPreferences') .firstElementChild;
diff --git a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor.ts b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor.ts index fd10a16..9db3e4d 100644 --- a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor.ts +++ b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor.ts
@@ -24,14 +24,8 @@ import {PolymerElement} from '@polymer/polymer/polymer-element'; import {htmlTemplate} from './gr-email-editor_html'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {EmailInfo} from '../../../types/common'; - -export interface GrEmailEditor { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; @customElement('gr-email-editor') export class GrEmailEditor extends GestureEventListeners( @@ -53,8 +47,10 @@ @property({type: String}) _newPreferred: string | null = null; + readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getAccountEmails().then(emails => { + return this.restApiService.getAccountEmails().then(emails => { this._emails = emails ?? []; }); } @@ -63,12 +59,12 @@ const promises: Promise<unknown>[] = []; for (const emailObj of this._emailsToRemove) { - promises.push(this.$.restAPI.deleteAccountEmail(emailObj.email)); + promises.push(this.restApiService.deleteAccountEmail(emailObj.email)); } if (this._newPreferred) { promises.push( - this.$.restAPI.setPreferredAccountEmail(this._newPreferred) + this.restApiService.setPreferredAccountEmail(this._newPreferred) ); }
diff --git a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_html.ts b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_html.ts index 525fca6..0591e4b 100644 --- a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_html.ts
@@ -95,5 +95,4 @@ </tbody> </table> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_test.ts b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_test.ts index 18ff95c..143d49c 100644 --- a/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_test.ts +++ b/polygerrit-ui/app/elements/settings/gr-email-editor/gr-email-editor_test.ts
@@ -114,9 +114,12 @@ }); test('save changes', done => { - const deleteEmailStub = sinon.stub(element.$.restAPI, 'deleteAccountEmail'); + const deleteEmailStub = sinon.stub( + element.restApiService, + 'deleteAccountEmail' + ); const setPreferredStub = sinon.stub( - element.$.restAPI, + element.restApiService, 'setPreferredAccountEmail' );
diff --git a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor.ts b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor.ts index 21e414b..087fe7c 100644 --- a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor.ts +++ b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor.ts
@@ -31,11 +31,10 @@ import {GrButton} from '../../shared/gr-button/gr-button'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {IronAutogrowTextareaElement} from '@polymer/iron-autogrow-textarea/iron-autogrow-textarea'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; export interface GrGpgEditor { $: { - restAPI: RestApiService & Element; viewKeyOverlay: GrOverlay; addButton: GrButton; newKey: IronAutogrowTextareaElement; @@ -70,9 +69,11 @@ @property({type: Array}) _keysToRemove: GpgKeyInfo[] = []; + private readonly restApiService = appContext.restApiService; + loadData() { this._keys = []; - return this.$.restAPI.getAccountGPGKeys().then(keys => { + return this.restApiService.getAccountGPGKeys().then(keys => { if (!keys) { return; } @@ -86,7 +87,7 @@ save() { const promises = this._keysToRemove.map(key => - this.$.restAPI.deleteAccountGPGKey(key.id!) + this.restApiService.deleteAccountGPGKey(key.id!) ); return Promise.all(promises).then(() => { @@ -117,7 +118,7 @@ _handleAddKey() { this.$.addButton.disabled = true; this.$.newKey.disabled = true; - return this.$.restAPI + return this.restApiService .addAccountGPGKey({add: [this._newKey.trim()]}) .then(() => { this.$.newKey.disabled = false;
diff --git a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_html.ts b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_html.ts index 432bc4f..69ac702 100644 --- a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_html.ts
@@ -133,5 +133,4 @@ > </fieldset> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_test.js b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_test.js index 2792176..1a84aeb4 100644 --- a/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_test.js +++ b/polygerrit-ui/app/elements/settings/gr-gpg-editor/gr-gpg-editor_test.js
@@ -74,7 +74,7 @@ test('remove key', done => { const lastKey = keys[Object.keys(keys)[1]]; - const saveStub = sinon.stub(element.$.restAPI, 'deleteAccountGPGKey') + const saveStub = sinon.stub(element.restApiService, 'deleteAccountGPGKey') .callsFake(() => Promise.resolve()); assert.equal(element._keysToRemove.length, 0); @@ -130,7 +130,8 @@ }, }; - const addStub = sinon.stub(element.$.restAPI, 'addAccountGPGKey').callsFake( + const addStub = sinon.stub(element.restApiService, + 'addAccountGPGKey').callsFake( () => Promise.resolve(newKeyObject)); element._newKey = newKeyString; @@ -155,7 +156,8 @@ test('add invalid key', done => { const newKeyString = 'not even close to valid'; - const addStub = sinon.stub(element.$.restAPI, 'addAccountGPGKey').callsFake( + const addStub = sinon.stub(element.restApiService, + 'addAccountGPGKey').callsFake( () => Promise.reject(new Error('error'))); element._newKey = newKeyString;
diff --git a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list.ts b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list.ts index d631c53..30146bc 100644 --- a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list.ts +++ b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list.ts
@@ -22,15 +22,9 @@ import {PolymerElement} from '@polymer/polymer/polymer-element'; import {htmlTemplate} from './gr-group-list_html'; import {GerritNav} from '../../core/gr-navigation/gr-navigation'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {customElement, property} from '@polymer/decorators'; import {GroupInfo, GroupId} from '../../../types/common'; - -export interface GrGroupList { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -48,8 +42,10 @@ @property({type: Array}) _groups: GroupInfo[] = []; + private readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getAccountGroups().then(groups => { + return this.restApiService.getAccountGroups().then(groups => { if (!groups) return; this._groups = groups.sort((a, b) => (a.name || '').localeCompare(b.name || '')
diff --git a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_html.ts b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_html.ts index e52583d..0ae3490 100644 --- a/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-group-list/gr-group-list_html.ts
@@ -57,5 +57,4 @@ </tbody> </table> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password.ts b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password.ts index 02683e3..424e30e 100644 --- a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password.ts +++ b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password.ts
@@ -26,7 +26,7 @@ import {htmlTemplate} from './gr-http-password_html'; import {property, customElement} from '@polymer/decorators'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -36,7 +36,6 @@ export interface GrHttpPassword { $: { - restAPI: RestApiService & Element; generatedPasswordOverlay: GrOverlay; }; } @@ -58,6 +57,8 @@ @property({type: String}) _passwordUrl: string | null = null; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -68,7 +69,7 @@ const promises = []; promises.push( - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { if (account) { this._username = account.username; } @@ -76,7 +77,7 @@ ); promises.push( - this.$.restAPI.getConfig().then(info => { + this.restApiService.getConfig().then(info => { if (info) { this._passwordUrl = info.auth.http_password_url || null; } else { @@ -91,7 +92,7 @@ _handleGenerateTap() { this._generatedPassword = 'Generating...'; this.$.generatedPasswordOverlay.open(); - this.$.restAPI.generateAccountHttpPassword().then(newPassword => { + this.restApiService.generateAccountHttpPassword().then(newPassword => { this._generatedPassword = newPassword; }); }
diff --git a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_html.ts b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_html.ts index 41084b5..549fc93 100644 --- a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_html.ts
@@ -94,5 +94,4 @@ > </div> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.js b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.js index 920ad48..6f47952 100644 --- a/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.js +++ b/polygerrit-ui/app/elements/settings/gr-http-password/gr-http-password_test.js
@@ -42,7 +42,7 @@ const button = element.$.generateButton; const nextPassword = 'the new password'; let generateResolve; - const generateStub = sinon.stub(element.$.restAPI, + const generateStub = sinon.stub(element.restApiService, 'generateAccountHttpPassword') .callsFake(() => new Promise(resolve => { generateResolve = resolve;
diff --git a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities.ts b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities.ts index 5f2b6a5..4222b03 100644 --- a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities.ts +++ b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities.ts
@@ -26,16 +26,15 @@ import {htmlTemplate} from './gr-identities_html'; import {getBaseUrl} from '../../../utils/url-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {AccountExternalIdInfo, ServerInfo} from '../../../types/common'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; import {PolymerDomRepeatEvent} from '../../../types/types'; +import {appContext} from '../../../services/app-context'; const AUTH = ['OPENID', 'OAUTH']; export interface GrIdentities { $: { - restAPI: RestApiService & Element; overlay: GrOverlay; }; } @@ -63,8 +62,10 @@ }) _showLinkAnotherIdentity?: boolean; + private readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getExternalIds().then(id => { + return this.restApiService.getExternalIds().then(id => { this._identities = id ?? []; }); } @@ -79,9 +80,11 @@ _handleDeleteItemConfirm() { this.$.overlay.close(); - return this.$.restAPI.deleteAccountIdentity([this._idName!]).then(() => { - this.loadData(); - }); + return this.restApiService + .deleteAccountIdentity([this._idName!]) + .then(() => { + this.loadData(); + }); } _handleConfirmDialogCancel() {
diff --git a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_html.ts b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_html.ts index 1472103..34af7eb 100644 --- a/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-identities/gr-identities_html.ts
@@ -103,5 +103,4 @@ item-type="id" ></gr-confirm-delete-item-dialog> </gr-overlay> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog.ts b/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog.ts index 0e73062..793900b 100644 --- a/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog.ts +++ b/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog.ts
@@ -25,12 +25,11 @@ import {htmlTemplate} from './gr-registration-dialog_html'; import {customElement, property, observe} from '@polymer/decorators'; import {ServerInfo, AccountDetailInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {EditableAccountField} from '../../../constants/constants'; +import {appContext} from '../../../services/app-context'; export interface GrRegistrationDialog { $: { - restAPI: RestApiService & Element; name: HTMLInputElement; username: HTMLInputElement; email: HTMLSelectElement; @@ -83,6 +82,8 @@ }) _usernameMutable = false; + private readonly restApiService = appContext.restApiService; + /** @override */ ready() { super.ready(); @@ -107,11 +108,11 @@ loadData() { this._loading = true; - const loadAccount = this.$.restAPI.getAccount().then(account => { + const loadAccount = this.restApiService.getAccount().then(account => { this._account = {...this._account, ...account}; }); - const loadConfig = this.$.restAPI.getConfig().then(config => { + const loadConfig = this.restApiService.getConfig().then(config => { this._serverConfig = config; }); @@ -123,12 +124,14 @@ _save() { this._saving = true; const promises = [ - this.$.restAPI.setAccountName(this.$.name.value), - this.$.restAPI.setPreferredAccountEmail(this.$.email.value || ''), + this.restApiService.setAccountName(this.$.name.value), + this.restApiService.setPreferredAccountEmail(this.$.email.value || ''), ]; if (this._usernameMutable) { - promises.push(this.$.restAPI.setAccountUsername(this.$.username.value)); + promises.push( + this.restApiService.setAccountUsername(this.$.username.value) + ); } return Promise.all(promises).then(() => {
diff --git a/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog_html.ts b/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog_html.ts index 11fbbc9..a1d6a5c 100644 --- a/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-registration-dialog/gr-registration-dialog_html.ts
@@ -129,5 +129,4 @@ > </footer> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts index 4293a83..bf739c7 100644 --- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts +++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.ts
@@ -57,7 +57,6 @@ import {GrIdentities} from '../gr-identities/gr-identities'; import {GrEditPreferences} from '../gr-edit-preferences/gr-edit-preferences'; import {GrDiffPreferences} from '../../shared/gr-diff-preferences/gr-diff-preferences'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { PreferencesInput, ServerInfo, @@ -69,6 +68,7 @@ import {GrEmailEditor} from '../gr-email-editor/gr-email-editor'; import {CustomKeyboardEvent} from '../../../types/events'; import {fireAlert, fireTitleChange} from '../../../utils/event-util'; +import {appContext} from '../../../services/app-context'; const PREFS_SECTION_FIELDS: Array<keyof PreferencesInput> = [ 'changes_per_page', @@ -102,7 +102,6 @@ export interface GrSettingsView { $: { - restAPI: RestApiService & Element; accountInfo: GrAccountInfo; watchedProjectsEditor: GrWatchedProjectsEditor; groupList: GrGroupList; @@ -214,6 +213,8 @@ public _testOnly_loadingPromise?: Promise<void>; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -234,7 +235,7 @@ ]; promises.push( - this.$.restAPI.getPreferences().then(prefs => { + this.restApiService.getPreferences().then(prefs => { if (!prefs) { throw new Error('getPreferences returned undefined'); } @@ -247,7 +248,7 @@ ); promises.push( - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._serverConfig = config; const configPromises: Array<Promise<void>> = []; @@ -264,7 +265,7 @@ } configPromises.push( - getDocsBaseUrl(config, this.$.restAPI).then(baseUrl => { + getDocsBaseUrl(config, this.restApiService).then(baseUrl => { this._docsBaseUrl = baseUrl; }) ); @@ -279,12 +280,14 @@ this.params.emailToken ) { promises.push( - this.$.restAPI.confirmEmail(this.params.emailToken).then(message => { - if (message) { - fireAlert(this, message); - } - this.$.emailEditor.loadData(); - }) + this.restApiService + .confirmEmail(this.params.emailToken) + .then(message => { + if (message) { + fireAlert(this, message); + } + this.$.emailEditor.loadData(); + }) ); } else { promises.push(this.$.emailEditor.loadData()); @@ -427,7 +430,7 @@ _handleSavePreferences() { this._copyPrefs(CopyPrefsDirection.LocalPrefsToPrefs); - return this.$.restAPI.savePreferences(this.prefs).then(() => { + return this.restApiService.savePreferences(this.prefs).then(() => { this._prefsChanged = false; }); } @@ -436,7 +439,7 @@ this.set('prefs.change_table', this._localChangeTableColumns); this.set('prefs.legacycid_in_change_table', this._showNumber); this._cloneChangeTableColumns(this._localChangeTableColumns); - return this.$.restAPI.savePreferences(this.prefs).then(() => { + return this.restApiService.savePreferences(this.prefs).then(() => { this._changeTableChanged = false; }); } @@ -452,13 +455,13 @@ _handleSaveMenu() { this.set('prefs.my', this._localMenu); this._cloneMenu(this._localMenu); - return this.$.restAPI.savePreferences(this.prefs).then(() => { + return this.restApiService.savePreferences(this.prefs).then(() => { this._menuChanged = false; }); } _handleResetMenuButton() { - return this.$.restAPI.getDefaultPreferences().then(data => { + return this.restApiService.getDefaultPreferences().then(data => { if (data?.my) { this._cloneMenu(data.my); } @@ -497,7 +500,7 @@ if (!this._isNewEmailValid(this._newEmail)) return; this._addingEmail = true; - this.$.restAPI.addAccountEmail(this._newEmail).then(response => { + this.restApiService.addAccountEmail(this._newEmail).then(response => { this._addingEmail = false; // If it was unsuccessful.
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_html.ts b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_html.ts index 78f84b1..d1d412f 100644 --- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_html.ts
@@ -552,5 +552,4 @@ <gr-endpoint-decorator name="settings-screen"> </gr-endpoint-decorator> </main> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js index 0535e15..a01edac 100644 --- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js +++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js
@@ -51,7 +51,7 @@ } function stubAddAccountEmail(statusCode) { - return sinon.stub(element.$.restAPI, 'addAccountEmail').callsFake( + return sinon.stub(element.restApiService, 'addAccountEmail').callsFake( () => Promise.resolve({status: statusCode})); } @@ -481,7 +481,7 @@ setup(() => { sinon.stub(element.$.emailEditor, 'loadData'); sinon.stub( - element.$.restAPI, + element.restApiService, 'confirmEmail') .callsFake( () => new Promise( @@ -491,8 +491,8 @@ }); test('it is used to confirm email via rest API', () => { - assert.isTrue(element.$.restAPI.confirmEmail.calledOnce); - assert.isTrue(element.$.restAPI.confirmEmail.calledWith('foo')); + assert.isTrue(element.restApiService.confirmEmail.calledOnce); + assert.isTrue(element.restApiService.confirmEmail.calledWith('foo')); }); test('emails are not loaded initially', () => {
diff --git a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor.ts b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor.ts index 507caef..d4de208 100644 --- a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor.ts +++ b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor.ts
@@ -31,11 +31,10 @@ import {GrButton} from '../../shared/gr-button/gr-button'; import {IronAutogrowTextareaElement} from '@polymer/iron-autogrow-textarea/iron-autogrow-textarea'; import {GrOverlay} from '../../shared/gr-overlay/gr-overlay'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; export interface GrSshEditor { $: { - restAPI: RestApiService & Element; addButton: GrButton; newKey: IronAutogrowTextareaElement; viewKeyOverlay: GrOverlay; @@ -70,8 +69,10 @@ @property({type: Array}) _keysToRemove: SshKeyInfo[] = []; + private readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getAccountSSHKeys().then(keys => { + return this.restApiService.getAccountSSHKeys().then(keys => { if (!keys) return; this._keys = keys; }); @@ -79,7 +80,7 @@ save() { const promises = this._keysToRemove.map(key => - this.$.restAPI.deleteAccountSSHKey(`${key.seq}`) + this.restApiService.deleteAccountSSHKey(`${key.seq}`) ); return Promise.all(promises).then(() => { this._keysToRemove = []; @@ -113,7 +114,7 @@ _handleAddKey() { this.$.addButton.disabled = true; this.$.newKey.disabled = true; - return this.$.restAPI + return this.restApiService .addAccountSSHKey(this._newKey.trim()) .then(key => { this.$.newKey.disabled = false;
diff --git a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_html.ts b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_html.ts index 96f770a..0bee1d3 100644 --- a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_html.ts
@@ -139,5 +139,4 @@ > </fieldset> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.js b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.js index 29ba6929..73e707f 100644 --- a/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.js +++ b/polygerrit-ui/app/elements/settings/gr-ssh-editor/gr-ssh-editor_test.js
@@ -65,7 +65,7 @@ test('remove key', done => { const lastKey = keys[1]; - const saveStub = sinon.stub(element.$.restAPI, 'deleteAccountSSHKey') + const saveStub = sinon.stub(element.restApiService, 'deleteAccountSSHKey') .callsFake(() => Promise.resolve()); assert.equal(element._keysToRemove.length, 0); @@ -116,7 +116,8 @@ valid: true, }; - const addStub = sinon.stub(element.$.restAPI, 'addAccountSSHKey').callsFake( + const addStub = sinon.stub(element.restApiService, + 'addAccountSSHKey').callsFake( () => Promise.resolve(newKeyObject)); element._newKey = newKeyString; @@ -141,7 +142,8 @@ test('add invalid key', done => { const newKeyString = 'not even close to valid'; - const addStub = sinon.stub(element.$.restAPI, 'addAccountSSHKey').callsFake( + const addStub = sinon.stub(element.restApiService, + 'addAccountSSHKey').callsFake( () => Promise.reject(new Error('error'))); element._newKey = newKeyString;
diff --git a/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor.ts b/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor.ts index 15f9c6b..58be0f7 100644 --- a/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor.ts +++ b/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor.ts
@@ -31,9 +31,9 @@ GrAutocomplete, AutocompleteSuggestion, } from '../../shared/gr-autocomplete/gr-autocomplete'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {hasOwnProperty} from '../../../utils/common-util'; import {ProjectWatchInfo} from '../../../types/common'; +import {appContext} from '../../../services/app-context'; const NOTIFICATION_TYPES = [ {name: 'Changes', key: 'notify_new_changes'}, @@ -45,7 +45,6 @@ export interface GrWatchedProjectsEditor { $: { - restAPI: RestApiService & Element; newFilter: HTMLInputElement; newProject: GrAutocomplete; }; @@ -70,13 +69,15 @@ @property({type: Object}) _query?: AutocompleteQuery; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this._query = input => this._getProjectSuggestions(input); } loadData() { - return this.$.restAPI.getWatchedProjects().then(projs => { + return this.restApiService.getWatchedProjects().then(projs => { this._projects = projs; }); } @@ -84,7 +85,7 @@ save() { let deletePromise; if (this._projectsToRemove.length) { - deletePromise = this.$.restAPI.deleteWatchedProjects( + deletePromise = this.restApiService.deleteWatchedProjects( this._projectsToRemove ); } else { @@ -94,7 +95,7 @@ return deletePromise .then(() => { if (this._projects) { - return this.$.restAPI.saveWatchedProjects(this._projects); + return this.restApiService.saveWatchedProjects(this._projects); } else { return Promise.resolve(undefined); } @@ -119,7 +120,7 @@ } _getProjectSuggestions(input: string) { - return this.$.restAPI.getSuggestedProjects(input).then(response => { + return this.restApiService.getSuggestedProjects(input).then(response => { const projects: AutocompleteSuggestion[] = []; for (const key in response) { if (!hasOwnProperty(response, key)) {
diff --git a/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor_html.ts b/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor_html.ts index e3a90a2..edc8fb2 100644 --- a/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor_html.ts +++ b/polygerrit-ui/app/elements/settings/gr-watched-projects-editor/gr-watched-projects-editor_html.ts
@@ -120,5 +120,4 @@ </tfoot> </table> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.ts b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.ts index 9623442..65bf55d3d 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.ts +++ b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip.ts
@@ -25,13 +25,8 @@ import {htmlTemplate} from './gr-account-chip_html'; import {customElement, property} from '@polymer/decorators'; import {AccountInfo, ChangeInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; -export interface GrAccountChip { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-account-chip') export class GrAccountChip extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -94,6 +89,8 @@ @property({type: Boolean}) transparentBackground = false; + private readonly restApiService = appContext.restApiService; + /** @override */ ready() { super.ready(); @@ -118,7 +115,7 @@ } _getHasAvatars() { - return this.$.restAPI + return this.restApiService .getConfig() .then(cfg => Promise.resolve(!!(cfg && cfg.plugin && cfg.plugin.has_avatars))
diff --git a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip_html.ts b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip_html.ts index 991104f..3bb1458 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-account-chip/gr-account-chip_html.ts
@@ -109,5 +109,4 @@ <iron-icon icon="gr-icons:close"></iron-icon> </gr-button> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.ts b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.ts index be23cb3..b37645e 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.ts +++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label.ts
@@ -27,16 +27,10 @@ import {getDisplayName} from '../../../utils/display-name-util'; import {isServiceUser} from '../../../utils/account-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {ReportingService} from '../../../services/gr-reporting/gr-reporting'; import {ChangeInfo, AccountInfo, ServerInfo} from '../../../types/common'; import {hasOwnProperty} from '../../../utils/common-util'; -export interface GrAccountLabel { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-account-label') export class GrAccountLabel extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -106,6 +100,8 @@ reporting: ReportingService; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this.reporting = appContext.reportingService; @@ -114,10 +110,10 @@ /** @override */ ready() { super.ready(); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._config = config; }); - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { this._selfAccount = account; }); this.addEventListener('attention-set-updated', () => { @@ -232,7 +228,7 @@ 'attention-icon-remove', this._reportingDetails() ); - this.$.restAPI + this.restApiService .removeFromAttentionSet( this.change._number, this.account._account_id,
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_html.ts b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_html.ts index 1d8b13e..b62df9e 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_html.ts
@@ -132,5 +132,4 @@ </template> </span> </span> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.js b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.js index 2e54db2..42b1dd7 100644 --- a/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.js +++ b/polygerrit-ui/app/elements/shared/gr-account-label/gr-account-label_test.js
@@ -99,7 +99,8 @@ }); test('tap attention button', () => { - const apiStub = sinon.stub(element.$.restAPI, 'removeFromAttentionSet') + const apiStub = sinon.stub(element.restApiService, + 'removeFromAttentionSet') .callsFake(() => Promise.resolve()); const button = element.shadowRoot.querySelector('#attentionButton'); assert.ok(button);
diff --git a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar.ts b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar.ts index 45bac9f..f8042a5 100644 --- a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar.ts +++ b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar.ts
@@ -25,13 +25,8 @@ import {getPluginLoader} from '../gr-js-api-interface/gr-plugin-loader'; import {customElement, property} from '@polymer/decorators'; import {AccountInfo} from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; -export interface GrAvatar { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-avatar') export class GrAvatar extends GestureEventListeners( LegacyElementMixin(PolymerElement) @@ -49,6 +44,8 @@ @property({type: Boolean}) _hasAvatars = false; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -63,7 +60,7 @@ } _getConfig() { - return this.$.restAPI.getConfig(); + return this.restApiService.getConfig(); } _accountChanged() {
diff --git a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_html.ts b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_html.ts index 0d8e78f..d105c5d7 100644 --- a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_html.ts
@@ -25,5 +25,4 @@ background-color: var(--avatar-background-color, #f1f2f3); } </style> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_test.js b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_test.js index 261d59c..baec672 100644 --- a/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_test.js +++ b/polygerrit-ui/app/elements/shared/gr-avatar/gr-avatar_test.js
@@ -104,7 +104,7 @@ getPluginLoader().loadPlugins([]); return Promise.all([ - element.$.restAPI.getConfig(), + element.restApiService.getConfig(), getPluginLoader().awaitPluginsLoaded(), ]).then(() => { assert.isFalse(element.hasAttribute('hidden')); @@ -134,7 +134,7 @@ getPluginLoader().loadPlugins([]); return Promise.all([ - element.$.restAPI.getConfig(), + element.restApiService.getConfig(), getPluginLoader().awaitPluginsLoaded(), ]).then(() => { assert.isTrue(element.hasAttribute('hidden')); @@ -167,7 +167,7 @@ getPluginLoader().loadPlugins([]); return Promise.all([ - element.$.restAPI.getConfig(), + element.restApiService.getConfig(), getPluginLoader().awaitPluginsLoaded(), ]).then(() => { assert.isTrue(element.hasAttribute('hidden'));
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts index f0c5012..d25b22c 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread.ts
@@ -37,7 +37,6 @@ import {CommentSide, Side, SpecialFilePath} from '../../../constants/constants'; import {computeDisplayPath} from '../../../utils/path-list-util'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { CommentRange, ConfigInfo, @@ -58,7 +57,6 @@ export interface GrCommentThread { $: { - restAPI: RestApiService & Element; storage: GrStorage; replyBtn: GrButton; quoteBtn: GrButton; @@ -187,6 +185,8 @@ flagsService = appContext.flagsService; + readonly restApiService = appContext.restApiService; + /** @override */ created() { super.created(); @@ -310,7 +310,7 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } @observe('comments.*') @@ -639,7 +639,7 @@ if (!name) { return; } - this.$.restAPI.getProjectConfig(name).then(config => { + this.restApiService.getProjectConfig(name).then(config => { this._projectConfig = config; }); }
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts index 4c15383..ee3e5d0 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_html.ts
@@ -164,6 +164,5 @@ </div> </div> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts index 8ce220c..86311dd 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment-thread/gr-comment-thread_test.ts
@@ -231,7 +231,7 @@ test('setting project name loads the project config', done => { const projectName = 'foo/bar/baz' as RepoName; const getProjectStub = sinon - .stub(element.$.restAPI, 'getProjectConfig') + .stub(element.restApiService, 'getProjectConfig') .returns(Promise.resolve({} as ConfigInfo)); element.projectName = projectName; flush(() => {
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts index b4d4c5b..e7cfd25 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment.ts
@@ -39,7 +39,6 @@ import {getRootElement} from '../../../scripts/rootElement'; import {appContext} from '../../../services/app-context'; import {customElement, observe, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrTextarea} from '../gr-textarea/gr-textarea'; import {GrStorage, StorageLocation} from '../gr-storage/gr-storage'; import {GrOverlay} from '../gr-overlay/gr-overlay'; @@ -98,7 +97,6 @@ export interface GrComment { $: { - restAPI: RestApiService & Element; storage: GrStorage; container: HTMLDivElement; resolvedCheckbox: HTMLInputElement; @@ -270,12 +268,14 @@ }; } + private readonly restApiService = appContext.restApiService; + reporting = appContext.reportingService; /** @override */ attached() { super.attached(); - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { this._selfAccount = account; }); if (this.editing) { @@ -405,7 +405,7 @@ } _getIsAdmin() { - return this.$.restAPI.getIsAdmin(); + return this.restApiService.getIsAdmin(); } _computeDraftTooltip(unableToSave: boolean) { @@ -441,7 +441,7 @@ } this._eraseDraftComment(); - return this.$.restAPI.getResponseObject(response).then(obj => { + return this.restApiService.getResponseObject(response).then(obj => { const resComment = (obj as unknown) as UIDraft; if (!isDraft(this.comment)) throw new Error('Can only save drafts.'); resComment.__draft = true; @@ -869,7 +869,7 @@ throw new Error('undefined draft or changeNum or patchNum'); } this._showStartRequest(); - return this.$.restAPI + return this.restApiService .saveDiffDraft(this.changeNum, this.patchNum, draft) .then(result => { if (result.ok) { @@ -894,7 +894,7 @@ } this._showStartRequest(); if (!draft.id) throw new Error('Missing id in comment draft.'); - return this.$.restAPI + return this.restApiService .deleteDiffDraft(this.changeNum, this.patchNum, {id: draft.id}) .then(result => { if (result.ok) { @@ -1020,7 +1020,7 @@ ) { throw new Error('undefined comment or id or changeNum or patchNum'); } - this.$.restAPI + this.restApiService .deleteComment( this.changeNum, this.patchNum,
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_html.ts b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_html.ts index c3125c1..64f0be1 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_html.ts
@@ -478,6 +478,5 @@ </gr-dialog> </gr-overlay> </template> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> <gr-storage id="storage"></gr-storage> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.js b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.js index e8d74f0..d7a581c 100644 --- a/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.js +++ b/polygerrit-ui/app/elements/shared/gr-comment/gr-comment_test.js
@@ -276,7 +276,7 @@ test('delete comment', done => { sinon.stub( - element.$.restAPI, 'deleteComment').returns(Promise.resolve({})); + element.restApiService, 'deleteComment').returns(Promise.resolve({})); sinon.spy(element.confirmDeleteOverlay, 'open'); element.changeNum = 42; element.patchNum = 0xDEADBEEF; @@ -293,7 +293,7 @@ .querySelector('#confirmDeleteComment'); dialog.message = 'removal reason'; element._handleConfirmDeleteComment(); - assert.isTrue(element.$.restAPI.deleteComment.calledWith( + assert.isTrue(element.restApiService.deleteComment.calledWith( 42, 0xDEADBEEF, 'baf0414d_60047215', 'removal reason')); done(); }); @@ -375,7 +375,7 @@ element.patchNum = 1; const updateRequestStub = sinon.stub(element, '_updateRequestToast'); const diffDraftStub = - sinon.stub(element.$.restAPI, 'saveDiffDraft').returns( + sinon.stub(element.restApiService, 'saveDiffDraft').returns( Promise.resolve({ok: false})); element._saveDraft({id: 'abc_123'}); flush(() => { @@ -411,7 +411,7 @@ element.patchNum = 1; const updateRequestStub = sinon.stub(element, '_updateRequestToast'); const diffDraftStub = - sinon.stub(element.$.restAPI, 'saveDiffDraft').returns( + sinon.stub(element.restApiService, 'saveDiffDraft').returns( Promise.reject(new Error())); element._saveDraft({id: 'abc_123'}); flush(() => { @@ -803,7 +803,7 @@ test('storage is cleared only after save success', () => { element._messageText = 'test'; const eraseStub = sinon.stub(element, '_eraseDraftComment'); - sinon.stub(element.$.restAPI, 'getResponseObject') + sinon.stub(element.restApiService, 'getResponseObject') .returns(Promise.resolve({})); sinon.stub(element, '_saveDraft').returns(Promise.resolve({ok: false}));
diff --git a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.ts b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.ts index 05e9a73..a4e2a39 100644 --- a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.ts +++ b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter.ts
@@ -34,8 +34,8 @@ } from '../../../utils/date-util'; import {TimeFormat, DateFormat} from '../../../constants/constants'; import {assertNever} from '../../../utils/common-util'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {Timestamp} from '../../../types/common'; +import {appContext} from '../../../services/app-context'; const TimeFormats = { TIME_12: 'h:mm A', // 2:14 PM @@ -78,12 +78,6 @@ } } -export interface GrDateFormatter { - $: { - restAPI: RestApiService & Element; - }; -} - @customElement('gr-date-formatter') export class GrDateFormatter extends TooltipMixin( GestureEventListeners(LegacyElementMixin(PolymerElement)) @@ -134,6 +128,8 @@ @property({type: Boolean}) relativeOptionNoAgo = false; + private readonly restApiService = appContext.restApiService; + constructor() { super(); } @@ -214,11 +210,11 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } _getPreferences() { - return this.$.restAPI.getPreferences(); + return this.restApiService.getPreferences(); } _computeDateStr(
diff --git a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_html.ts b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_html.ts index a08a77d..97bbf68 100644 --- a/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-date-formatter/gr-date-formatter_html.ts
@@ -27,5 +27,4 @@ [[_computeDateStr(dateStr, _timeFormat, _dateFormat, _relative, showDateAndTime, showYesterday)]] </span> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts index e781820c..9ede8cc 100644 --- a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts +++ b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts
@@ -24,13 +24,12 @@ import {PolymerElement} from '@polymer/polymer/polymer-element'; import {htmlTemplate} from './gr-diff-preferences_html'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {DiffPreferencesInfo} from '../../../types/diff'; import {GrSelect} from '../gr-select/gr-select'; +import {appContext} from '../../../services/app-context'; export interface GrDiffPreferences { $: { - restAPI: RestApiService & Element; lineWrappingInput: HTMLInputElement; showTabsInput: HTMLInputElement; showTrailingWhitespaceInput: HTMLInputElement; @@ -55,8 +54,10 @@ @property({type: Object}) diffPrefs?: DiffPreferencesInfo; + private readonly restApiService = appContext.restApiService; + loadData() { - return this.$.restAPI.getDiffPreferences().then(prefs => { + return this.restApiService.getDiffPreferences().then(prefs => { this.diffPrefs = prefs; }); } @@ -99,7 +100,7 @@ save() { if (!this.diffPrefs) return Promise.reject(new Error('Missing diff preferences')); - return this.$.restAPI.saveDiffPreferences(this.diffPrefs).then(_ => { + return this.restApiService.saveDiffPreferences(this.diffPrefs).then(_ => { this.hasUnsavedChanges = false; }); }
diff --git a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_html.ts b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_html.ts index 54022ba..d30aadf 100644 --- a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_html.ts
@@ -191,5 +191,4 @@ </div> </section> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_test.js b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_test.js index ced8c6c..6afb299 100644 --- a/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_test.js +++ b/polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences_test.js
@@ -89,7 +89,7 @@ }); test('save changes', () => { - sinon.stub(element.$.restAPI, 'saveDiffPreferences') + sinon.stub(element.restApiService, 'saveDiffPreferences') .returns(Promise.resolve()); const showTrailingWhitespaceCheckbox = valueOf('Show trailing whitespace', 'diffPreferences')
diff --git a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts index 97747a0..34595cc 100644 --- a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts +++ b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts
@@ -24,7 +24,7 @@ import {htmlTemplate} from './gr-download-commands_html'; import {customElement, property, observe} from '@polymer/decorators'; import {PaperTabsElement} from '@polymer/paper-tabs/paper-tabs'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -35,7 +35,6 @@ export interface GrDownloadCommands { $: { downloadTabs: PaperTabsElement; - restAPI: RestApiService & Element; }; } @@ -65,6 +64,8 @@ @property({type: String, notify: true}) selectedScheme?: string; + private readonly restApiService = appContext.restApiService; + /** @override */ attached() { super.attached(); @@ -79,7 +80,7 @@ } _getLoggedIn() { - return this.$.restAPI.getLoggedIn(); + return this.restApiService.getLoggedIn(); } @observe('_loggedIn') @@ -87,7 +88,7 @@ if (!loggedIn) { return; } - return this.$.restAPI.getPreferences().then(prefs => { + return this.restApiService.getPreferences().then(prefs => { if (prefs?.download_scheme) { // Note (issue 5180): normalize the download scheme with lower-case. this.selectedScheme = prefs.download_scheme.toLowerCase(); @@ -100,7 +101,9 @@ if (scheme && scheme !== this.selectedScheme) { this.set('selectedScheme', scheme); if (this._loggedIn) { - this.$.restAPI.savePreferences({download_scheme: this.selectedScheme}); + this.restApiService.savePreferences({ + download_scheme: this.selectedScheme, + }); } } }
diff --git a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_html.ts b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_html.ts index 35385fa..5c15b29 100644 --- a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_html.ts
@@ -72,5 +72,4 @@ ></gr-shell-command> </template> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.js b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.js index 5429506..105cc2c 100644 --- a/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.js +++ b/polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.js
@@ -94,10 +94,11 @@ }, }); element._loggedIn = true; - assert.isTrue(element.$.restAPI.getPreferences.called); - return element.$.restAPI.getPreferences.lastCall.returnValue.then(() => { - assert.equal(element.selectedScheme, 'repo'); - }); + assert.isTrue(element.restApiService.getPreferences.called); + return element.restApiService.getPreferences.lastCall.returnValue.then( + () => { + assert.equal(element.selectedScheme, 'repo'); + }); }); test('normalize scheme from preferences', () => { @@ -107,14 +108,16 @@ }, }); element._loggedIn = true; - return element.$.restAPI.getPreferences.lastCall.returnValue.then(() => { - assert.equal(element.selectedScheme, 'repo'); - }); + return element.restApiService.getPreferences.lastCall.returnValue.then( + () => { + assert.equal(element.selectedScheme, 'repo'); + }); }); test('saves scheme to preferences', () => { element._loggedIn = true; - const savePrefsStub = sinon.stub(element.$.restAPI, 'savePreferences') + const savePrefsStub = sinon.stub(element.restApiService, + 'savePreferences') .callsFake(() => Promise.resolve()); flush();
diff --git a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_html.ts b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_html.ts index 8ea0d21..c767edd 100644 --- a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown_html.ts
@@ -165,5 +165,4 @@ focus-on-move="" stops="[[_listElements]]" ></gr-cursor-manager> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts index 0b4e577..9764c59 100644 --- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts +++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account.ts
@@ -29,7 +29,6 @@ import {accountKey} from '../../../utils/account-util'; import {getDisplayName} from '../../../utils/display-name-util'; import {customElement, property} from '@polymer/decorators'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import { AccountInfo, ChangeInfo, @@ -48,11 +47,6 @@ import {isRemovableReviewer} from '../../../utils/change-util'; import {CURRENT} from '../../../utils/patch-set-util'; -export interface GrHovercardAccount { - $: { - restAPI: RestApiService & Element; - }; -} @customElement('gr-hovercard-account') export class GrHovercardAccount extends GestureEventListeners( hovercardBehaviorMixin(LegacyElementMixin(PolymerElement)) @@ -95,6 +89,8 @@ reporting: ReportingService; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this.reporting = appContext.reportingService; @@ -102,10 +98,10 @@ attached() { super.attached(); - this.$.restAPI.getConfig().then(config => { + this.restApiService.getConfig().then(config => { this._config = config; }); - this.$.restAPI.getAccount().then(account => { + this.restApiService.getAccount().then(account => { this._selfAccount = account; }); } @@ -186,7 +182,7 @@ }, ]; - this.$.restAPI + this.restApiService .saveChangeReview(this.change._number, CURRENT, reviewInput) .then(response => { if (!response || !response.ok) { @@ -205,7 +201,7 @@ this.dispatchEventThroughTarget('show-alert', { message: 'Reloading page...', }); - this.$.restAPI + this.restApiService .removeChangeReviewer( this.change._number, (this.account?._account_id || this.account?.email)! @@ -257,7 +253,7 @@ 'attention-hovercard-add', this._reportingDetails() ); - this.$.restAPI + this.restApiService .addToAttentionSet(this.change._number, this.account._account_id, reason) .then(() => { this.dispatchEventThroughTarget('hide-alert'); @@ -284,7 +280,7 @@ 'attention-hovercard-remove', this._reportingDetails() ); - this.$.restAPI + this.restApiService .removeFromAttentionSet( this.change._number, this.account._account_id,
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_html.ts b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_html.ts index 1d437fb..99d3d6c 100644 --- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_html.ts
@@ -196,5 +196,4 @@ </template> </template> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.js b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.js index b09f0ce..c8b4b42 100644 --- a/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.js +++ b/polygerrit-ui/app/elements/shared/gr-hovercard-account/gr-hovercard-account_test.js
@@ -36,7 +36,7 @@ setup(() => { element = basicFixture.instantiate(); - sinon.stub(element.$.restAPI, 'getAccount').returns( + sinon.stub(element.restApiService, 'getAccount').returns( new Promise(resolve => { '2'; }) ); @@ -110,7 +110,7 @@ [ReviewerState.REVIEWER]: [ACCOUNT], }, }; - sinon.stub(element.$.restAPI, 'removeChangeReviewer').returns( + sinon.stub(element.restApiService, 'removeChangeReviewer').returns( Promise.resolve({ok: true})); const reloadListener = sinon.spy(); element._target.addEventListener('reload', reloadListener); @@ -130,10 +130,10 @@ [ReviewerState.REVIEWER]: [ACCOUNT], }, }; - const saveReviewStub = sinon.stub(element.$.restAPI, + const saveReviewStub = sinon.stub(element.restApiService, 'saveChangeReview').returns( Promise.resolve({ok: true})); - sinon.stub(element.$.restAPI, 'removeChangeReviewer').returns( + sinon.stub(element.restApiService, 'removeChangeReviewer').returns( Promise.resolve({ok: true})); const reloadListener = sinon.spy(); element._target.addEventListener('reload', reloadListener); @@ -157,10 +157,10 @@ [ReviewerState.REVIEWER]: [], }, }; - const saveReviewStub = sinon.stub(element.$.restAPI, + const saveReviewStub = sinon.stub(element.restApiService, 'saveChangeReview').returns( Promise.resolve({ok: true})); - sinon.stub(element.$.restAPI, 'removeChangeReviewer').returns( + sinon.stub(element.restApiService, 'removeChangeReviewer').returns( Promise.resolve({ok: true})); const reloadListener = sinon.spy(); element._target.addEventListener('reload', reloadListener); @@ -184,7 +184,7 @@ [ReviewerState.REVIEWER]: [], }, }; - sinon.stub(element.$.restAPI, 'removeChangeReviewer').returns( + sinon.stub(element.restApiService, 'removeChangeReviewer').returns( Promise.resolve({ok: true})); const reloadListener = sinon.spy(); element._target.addEventListener('reload', reloadListener); @@ -206,7 +206,7 @@ const apiPromise = new Promise(r => { apiResolve = r; }); - sinon.stub(element.$.restAPI, 'addToAttentionSet') + sinon.stub(element.restApiService, 'addToAttentionSet') .callsFake(() => apiPromise); element.highlightAttention = true; element._target = document.createElement('div'); @@ -239,7 +239,7 @@ const apiPromise = new Promise(r => { apiResolve = r; }); - sinon.stub(element.$.restAPI, 'removeFromAttentionSet') + sinon.stub(element.restApiService, 'removeFromAttentionSet') .callsFake(() => apiPromise); element.highlightAttention = true; element.change = {attention_set: {31415926535: {}}};
diff --git a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts index 1dac371..332aa51 100644 --- a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts +++ b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info.ts
@@ -38,15 +38,9 @@ isQuickLabelInfo, isDetailedLabelInfo, } from '../../../types/common'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; import {GrButton} from '../gr-button/gr-button'; import {getVotingRangeOrDefault} from '../../../utils/label-util'; - -export interface GrLabelInfo { - $: { - restAPI: RestApiService & Element; - }; -} +import {appContext} from '../../../services/app-context'; declare global { interface HTMLElementTagNameMap { @@ -90,6 +84,8 @@ @property({type: Boolean}) mutable = false; + private readonly restApiService = appContext.restApiService; + // TODO(TS): not used, remove later _xhrPromise?: Promise<void>; @@ -206,7 +202,7 @@ const accountID = Number( `${target.getAttribute('data-account-id')}` ) as AccountId; - this._xhrPromise = this.$.restAPI + this._xhrPromise = this.restApiService .deleteVote(this.change._number, accountID, this.label) .then(response => { target.disabled = false;
diff --git a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_html.ts b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_html.ts index 3955cd4..46b8be1 100644 --- a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_html.ts
@@ -118,5 +118,4 @@ </tr> </template> </table> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_test.js b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_test.js index 3a2cc39..aa71bfc 100644 --- a/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_test.js +++ b/polygerrit-ui/app/elements/shared/gr-label-info/gr-label-info_test.js
@@ -73,7 +73,7 @@ test('deletes votes', () => { const deleteResponse = Promise.resolve({ok: true}); const deleteStub = sinon.stub( - element.$.restAPI, 'deleteVote').returns(deleteResponse); + element.restApiService, 'deleteVote').returns(deleteResponse); element.change.removable_reviewers = [element.account]; element.change.labels.test.recommended = {_account_id: 1};
diff --git a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker.ts b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker.ts index 01eada8..48c2253 100644 --- a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker.ts +++ b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker.ts
@@ -33,7 +33,7 @@ BranchInfo, } from '../../../types/common'; import {GrLabeledAutocomplete} from '../gr-labeled-autocomplete/gr-labeled-autocomplete'; -import {RestApiService} from '../../../services/services/gr-rest-api/gr-rest-api'; +import {appContext} from '../../../services/app-context'; const SUGGESTIONS_LIMIT = 15; const REF_PREFIX = 'refs/heads/'; @@ -42,7 +42,6 @@ $: { repoInput: GrLabeledAutocomplete; branchInput: GrLabeledAutocomplete; - restAPI: RestApiService & Element; }; } @customElement('gr-repo-branch-picker') @@ -68,6 +67,8 @@ @property({type: Object}) _repoQuery?: AutocompleteQuery; + private readonly restApiService = appContext.restApiService; + constructor() { super(); this._query = input => this._getRepoBranchesSuggestions(input); @@ -95,13 +96,13 @@ if (input.startsWith(REF_PREFIX)) { input = input.substring(REF_PREFIX.length); } - return this.$.restAPI + return this.restApiService .getRepoBranches(input, this.repo, SUGGESTIONS_LIMIT) .then(res => this._branchResponseToSuggestions(res)); } _getRepoSuggestions(input: string) { - return this.$.restAPI + return this.restApiService .getRepos(input, SUGGESTIONS_LIMIT) .then(res => this._repoResponseToSuggestions(res)); }
diff --git a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_html.ts b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_html.ts index 934b3cb..3e551b6 100644 --- a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_html.ts +++ b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_html.ts
@@ -49,5 +49,4 @@ > </gr-labeled-autocomplete> </div> - <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> `;
diff --git a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_test.js b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_test.js index 1d8ae98..8fbc639 100644 --- a/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_test.js +++ b/polygerrit-ui/app/elements/shared/gr-repo-branch-picker/gr-repo-branch-picker_test.js
@@ -29,7 +29,7 @@ suite('_getRepoSuggestions', () => { setup(() => { - sinon.stub(element.$.restAPI, 'getRepos') + sinon.stub(element.restApiService, 'getRepos') .returns(Promise.resolve([ { id: 'plugins%2Favatars-external', @@ -50,7 +50,7 @@ test('converts to suggestion objects', () => { const input = 'plugins/avatars'; return element._getRepoSuggestions(input).then(suggestions => { - assert.isTrue(element.$.restAPI.getRepos.calledWith(input)); + assert.isTrue(element.restApiService.getRepos.calledWith(input)); const unencodedNames = [ 'plugins/avatars-external', 'plugins/avatars-gravatar', @@ -65,7 +65,7 @@ suite('_getRepoBranchesSuggestions', () => { setup(() => { - sinon.stub(element.$.restAPI, 'getRepoBranches') + sinon.stub(element.restApiService, 'getRepoBranches') .returns(Promise.resolve([ {ref: 'refs/heads/stable-2.10'}, {ref: 'refs/heads/stable-2.11'}, @@ -82,7 +82,7 @@ element.repo = repo; return element._getRepoBranchesSuggestions(branchInput) .then(suggestions => { - assert.isTrue(element.$.restAPI.getRepoBranches.calledWith( + assert.isTrue(element.restApiService.getRepoBranches.calledWith( branchInput, repo, 15)); const refNames = [ 'stable-2.10', @@ -103,7 +103,7 @@ element.repo = repo; return element._getRepoBranchesSuggestions(branchInput) .then(suggestions => { - assert.isTrue(element.$.restAPI.getRepoBranches.calledWith( + assert.isTrue(element.restApiService.getRepoBranches.calledWith( 'stable-2.1', repo, 15)); }); }); @@ -111,12 +111,12 @@ test('does not query when repo is unset', () => element ._getRepoBranchesSuggestions('') .then(() => { - assert.isFalse(element.$.restAPI.getRepoBranches.called); + assert.isFalse(element.restApiService.getRepoBranches.called); element.repo = 'gerrit'; return element._getRepoBranchesSuggestions(''); }) .then(() => { - assert.isTrue(element.$.restAPI.getRepoBranches.called); + assert.isTrue(element.restApiService.getRepoBranches.called); })); }); });
diff --git a/polygerrit-ui/app/scripts/gr-email-suggestions-provider/gr-email-suggestions-provider_test.js b/polygerrit-ui/app/scripts/gr-email-suggestions-provider/gr-email-suggestions-provider_test.js index 7c40b7a..ac48ea0 100644 --- a/polygerrit-ui/app/scripts/gr-email-suggestions-provider/gr-email-suggestions-provider_test.js +++ b/polygerrit-ui/app/scripts/gr-email-suggestions-provider/gr-email-suggestions-provider_test.js
@@ -18,11 +18,7 @@ import '../../test/common-test-setup-karma.js'; import '../../elements/shared/gr-rest-api-interface/gr-rest-api-interface.js'; import {GrEmailSuggestionsProvider} from './gr-email-suggestions-provider.js'; -import {html} from '@polymer/polymer/lib/utils/html-tag.js'; - -const basicFixture = fixtureFromTemplate(html` -<gr-rest-api-interface id="restAPI"></gr-rest-api-interface> -`); +import {appContext} from '../../services/app-context.js'; suite('GrEmailSuggestionsProvider tests', () => { let restAPI; @@ -40,7 +36,7 @@ stub('gr-rest-api-interface', { getConfig() { return Promise.resolve({}); }, }); - restAPI = basicFixture.instantiate(); + restAPI = appContext.restApiService; provider = new GrEmailSuggestionsProvider(restAPI); });
diff --git a/polygerrit-ui/app/scripts/gr-group-suggestions-provider/gr-group-suggestions-provider_test.js b/polygerrit-ui/app/scripts/gr-group-suggestions-provider/gr-group-suggestions-provider_test.js index 0939f76..f03195d 100644 --- a/polygerrit-ui/app/scripts/gr-group-suggestions-provider/gr-group-suggestions-provider_test.js +++ b/polygerrit-ui/app/scripts/gr-group-suggestions-provider/gr-group-suggestions-provider_test.js
@@ -18,11 +18,7 @@ import '../../test/common-test-setup-karma.js'; import '../../elements/shared/gr-rest-api-interface/gr-rest-api-interface.js'; import {GrGroupSuggestionsProvider} from './gr-group-suggestions-provider.js'; -import {html} from '@polymer/polymer/lib/utils/html-tag.js'; - -const basicFixture = fixtureFromTemplate(html` -<gr-rest-api-interface id="restAPI"></gr-rest-api-interface> -`); +import {appContext} from '../../services/app-context.js'; suite('GrGroupSuggestionsProvider tests', () => { let restAPI; @@ -41,7 +37,7 @@ stub('gr-rest-api-interface', { getConfig() { return Promise.resolve({}); }, }); - restAPI = basicFixture.instantiate(); + restAPI = appContext.restApiService; provider = new GrGroupSuggestionsProvider(restAPI); });
diff --git a/polygerrit-ui/app/scripts/gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider_test.js b/polygerrit-ui/app/scripts/gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider_test.js index fe13c1c..2aea699 100644 --- a/polygerrit-ui/app/scripts/gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider_test.js +++ b/polygerrit-ui/app/scripts/gr-reviewer-suggestions-provider/gr-reviewer-suggestions-provider_test.js
@@ -18,11 +18,7 @@ import '../../test/common-test-setup-karma.js'; import '../../elements/shared/gr-rest-api-interface/gr-rest-api-interface.js'; import {GrReviewerSuggestionsProvider, SUGGESTIONS_PROVIDERS_USERS_TYPES} from './gr-reviewer-suggestions-provider.js'; -import {html} from '@polymer/polymer/lib/utils/html-tag.js'; - -const basicFixture = fixtureFromTemplate(html` -<gr-rest-api-interface id="restAPI"></gr-rest-api-interface> -`); +import {appContext} from '../../services/app-context.js'; suite('GrReviewerSuggestionsProvider tests', () => { let _nextAccountId = 0; @@ -77,7 +73,7 @@ getConfig() { return Promise.resolve({}); }, }); - restAPI = basicFixture.instantiate(); + restAPI = appContext.restApiService; change = { _number: 42, owner,