blob: 687539f832336b530e0b83277211513c1e391a69 [file] [log] [blame]
// Copyright 2019 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.
(function() {
'use strict';
/**
* Number of settings sections to show when "More settings" is collapsed.
* @type {number}
*/
const MAX_SECTIONS_TO_SHOW = 6;
Polymer({
is: 'print-preview-sidebar',
behaviors: [
SettingsBehavior,
CrContainerShadowBehavior,
WebUIListenerBehavior,
print_preview.DarkModeBehavior,
],
properties: {
cloudPrintErrorMessage: String,
/** @type {cloudprint.CloudPrintInterface} */
cloudPrintInterface: Object,
controlsManaged: Boolean,
/** @type {print_preview.Destination} */
destination: {
type: Object,
notify: true,
},
/** @private {!print_preview.DestinationState} */
destinationState: {
type: Number,
notify: true,
},
/** @type {!print_preview.Error} */
error: {
type: Number,
notify: true,
},
newPrintPreviewLayout: {
type: Boolean,
reflectToAttribute: true,
},
pageCount: Number,
/** @type {!print_preview.State} */
state: {
type: Number,
observer: 'onStateChanged_',
},
/** @private {boolean} */
controlsDisabled_: {
type: Boolean,
computed: 'computeControlsDisabled_(state)',
},
/** @private {boolean} */
firstLoad_: {
type: Boolean,
value: true,
},
/** @private {boolean} */
isInAppKioskMode_: {
type: Boolean,
value: false,
},
/** @private {boolean} */
settingsExpandedByUser_: {
type: Boolean,
value: false,
},
/** @private {boolean} */
shouldShowMoreSettings_: {
type: Boolean,
computed: 'computeShouldShowMoreSettings_(settings.pages.available, ' +
'settings.copies.available, settings.layout.available, ' +
'settings.color.available, settings.mediaSize.available, ' +
'settings.dpi.available, settings.margins.available, ' +
'settings.pagesPerSheet.available, settings.scaling.available, ' +
'settings.duplex.available, settings.otherOptions.available, ' +
'settings.vendorItems.available)',
},
},
/**
* @param {boolean} appKioskMode
* @param {string} defaultPrinter The system default printer ID.
* @param {string} serializedDestinationSelectionRulesStr String with rules
* for selecting the default destination.
* @param {?Array<string>} userAccounts The signed in user accounts.
* @param {boolean} syncAvailable
*/
init: function(
appKioskMode, defaultPrinter, serializedDestinationSelectionRulesStr,
userAccounts, syncAvailable) {
this.isInAppKioskMode_ = appKioskMode;
this.$.destinationSettings.init(
defaultPrinter, serializedDestinationSelectionRulesStr, userAccounts,
syncAvailable);
},
/**
* @return {boolean} Whether the controls should be disabled.
* @private
*/
computeControlsDisabled_: function() {
return this.state != print_preview.State.READY;
},
/**
* @return {boolean} Whether to show the "More settings" link.
* @private
*/
computeShouldShowMoreSettings_: function() {
// Destination settings is always available. See if the total number of
// available sections exceeds the maximum number to show.
return [
'pages', 'copies', 'layout', 'color', 'mediaSize', 'margins', 'color',
'pagesPerSheet', 'scaling', 'dpi', 'duplex', 'otherOptions', 'vendorItems'
].reduce((count, setting) => {
return this.getSetting(setting).available ? count + 1 : count;
}, 1) > MAX_SECTIONS_TO_SHOW;
},
/**
* @return {boolean} Whether the "more settings" collapse should be expanded.
* @private
*/
shouldExpandSettings_: function() {
if (this.settingsExpandedByUser_ === undefined ||
this.shouldShowMoreSettings_ === undefined) {
return false;
}
// Expand the settings if the user has requested them expanded or if more
// settings is not displayed (i.e. less than 6 total settings available).
return this.settingsExpandedByUser_ || !this.shouldShowMoreSettings_;
},
/** @private */
onPrintButtonFocused_: function() {
this.firstLoad_ = false;
},
onStateChanged_: function() {
if (this.state !== print_preview.State.PRINTING) {
return;
}
if (this.shouldShowMoreSettings_) {
print_preview.MetricsContext.printSettingsUi().record(
this.settingsExpandedByUser_ ?
print_preview.Metrics.PrintSettingsUiBucket
.PRINT_WITH_SETTINGS_EXPANDED :
print_preview.Metrics.PrintSettingsUiBucket
.PRINT_WITH_SETTINGS_COLLAPSED);
}
},
/** @return {boolean} Whether the system dialog link is available. */
systemDialogLinkAvailable: function() {
const linkContainer = this.$$('print-preview-link-container');
return !!linkContainer && linkContainer.systemDialogLinkAvailable();
},
});
})();