// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import './shimless_rma_shared.css.js';
import './base_page.js';
import './icons.html.js';
import 'chrome://resources/ash/common/cr_elements/icons.html.js';
import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
import {I18nMixin} from 'chrome://resources/ash/common/cr_elements/i18n_mixin.js';
import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {getShimlessRmaService} from './mojo_interface_provider.js';
import {getTemplate} from './reimaging_calibration_run_page.html.js';
import {CalibrationComponentStatus, CalibrationObserverReceiver, CalibrationOverallStatus, ShimlessRmaServiceInterface, StateResult} from './shimless_rma.mojom-webui.js';
import {enableNextButton, executeThenTransitionState, focusPageTitle} from './shimless_rma_util.js';
/**
* @fileoverview
* 'reimaging-calibration-page' is for recalibration of the
* various components during the reimaging process.
*/
const ReimagingCalibrationRunPageBase = I18nMixin(PolymerElement);
export class ReimagingCalibrationRunPage extends
ReimagingCalibrationRunPageBase {
static get is() {
return 'reimaging-calibration-run-page' as const;
}
static get template() {
return getTemplate();
}
static get properties() {
return {
calibrationComplete: {
type: Boolean,
value: false,
},
};
}
private shimlessRmaService: ShimlessRmaServiceInterface =
getShimlessRmaService();
private calibrationObserverReceiver: CalibrationObserverReceiver;
protected calibrationComplete: boolean;
constructor() {
super();
this.calibrationObserverReceiver = new CalibrationObserverReceiver(this);
this.shimlessRmaService.observeCalibrationProgress(
this.calibrationObserverReceiver.$.bindNewPipeAndPassRemote());
}
override ready() {
super.ready();
focusPageTitle(this);
}
onNextButtonClick(): Promise<{stateResult: StateResult}> {
if (this.calibrationComplete) {
return this.shimlessRmaService.calibrationComplete();
}
return Promise.reject(new Error('Calibration is not complete.'));
}
/**
* Implements CalibrationObserver.onCalibrationUpdated()
*/
onCalibrationUpdated(_componentStatus: CalibrationComponentStatus): void {}
/**
* Implements CalibrationObserver.onCalibrationStepComplete()
*/
onCalibrationStepComplete(status: CalibrationOverallStatus): void {
switch (status) {
case CalibrationOverallStatus.kCalibrationOverallComplete:
this.calibrationComplete = true;
enableNextButton(this);
break;
case CalibrationOverallStatus.kCalibrationOverallCurrentRoundComplete:
case CalibrationOverallStatus.kCalibrationOverallCurrentRoundFailed:
case CalibrationOverallStatus.kCalibrationOverallInitializationFailed:
executeThenTransitionState(
this, () => this.shimlessRmaService.continueCalibration());
break;
}
}
protected getCalibrationTitleString(): string {
return this.i18n(
this.calibrationComplete ? 'runCalibrationCompleteTitleText' :
'runCalibrationTitleText');
}
}
declare global {
interface HTMLElementTagNameMap {
[ReimagingCalibrationRunPage.is]: ReimagingCalibrationRunPage;
}
}
customElements.define(
ReimagingCalibrationRunPage.is, ReimagingCalibrationRunPage);