blob: 07f20e663d286d307b2523b467412f8f3d0000f2 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview
* 'settings-incompatible-applications-page' is the settings subpage containing
* the list of incompatible applications.
*
* Example:
*
* <iron-animated-pages>
* <settings-incompatible-applications-page">
* </settings-incompatible-applications-page>
* ... other pages ...
* </iron-animated-pages>
*/
Polymer({
is: 'settings-incompatible-applications-page',
behaviors: [I18nBehavior, WebUIListenerBehavior],
properties: {
/**
* Indicates if the current user has administrator rights.
* @private
*/
hasAdminRights_: {
type: Boolean,
value: function() {
return loadTimeData.getBoolean('hasAdminRights');
},
},
/**
* The list of all the incompatible applications.
* @private {Array<settings.IncompatibleApplication>}
*/
applications_: Array,
/**
* Determines if the user has finished with this page.
* @private
*/
isDone_: {
type: Boolean,
computed: 'computeIsDone_(applications_.*)',
},
/**
* The text for the subtitle of the subpage.
* @private
*/
subtitleText_: {
type: String,
value: '',
},
/**
* The text for the subtitle of the subpage, when the user does not have
* administrator rights.
* @private
*/
subtitleNoAdminRightsText_: {
type: String,
value: '',
},
/**
* The text for the title of the list of incompatible applications.
* @private
*/
listTitleText_: {
type: String,
value: '',
},
},
/** @override */
ready: function() {
this.addWebUIListener(
'incompatible-application-removed',
this.onIncompatibleApplicationRemoved_.bind(this));
settings.IncompatibleApplicationsBrowserProxyImpl.getInstance()
.requestIncompatibleApplicationsList()
.then(list => {
this.applications_ = list;
this.updatePluralStrings_();
});
},
/**
* @return {boolean}
* @private
*/
computeIsDone_: function() {
return this.applications_.length === 0;
},
/**
* Removes a single incompatible application from the |applications_| list.
* @private
*/
onIncompatibleApplicationRemoved_: function(applicationName) {
// Find the index of the element.
const index = this.applications_.findIndex(function(application) {
return application.name == applicationName;
});
assert(index !== -1);
this.splice('applications_', index, 1);
},
/**
* Updates the texts of the Incompatible Applications subpage that depends on
* the length of |applications_|.
* @private
*/
updatePluralStrings_: function() {
const browserProxy =
settings.IncompatibleApplicationsBrowserProxyImpl.getInstance();
const numApplications = this.applications_.length;
// The plural strings are not displayed when there is no applications.
if (this.applications_.length === 0)
return;
Promise
.all([
browserProxy.getSubtitlePluralString(numApplications),
browserProxy.getSubtitleNoAdminRightsPluralString(numApplications),
browserProxy.getListTitlePluralString(numApplications),
])
.then(strings => {
this.subtitleText_ = strings[0];
this.subtitleNoAdminRightsText_ = strings[1];
this.listTitleText_ = strings[2];
});
},
});