in javascript/widgets/firebaseuihandler.js [378:451]
startSignIn(auth, tenantInfo = undefined) {
return new GoogPromise((resolve, reject) => {
const apiKey = auth['app']['options']['apiKey'];
if (!this.configs_.hasOwnProperty(apiKey)) {
reject(
new Error('Invalid project configuration: API key is invalid!'));
}
const signInConfig =
this.configs_[apiKey].getSignInConfigForTenant(
auth['tenantId'] ||
UiHandlerConfig.ConfigKeys.TOP_LEVEL_CONFIG_KEY,
tenantInfo && tenantInfo['providerIds']);
this.disposeCurrentComponent_();
// Passes the sign-in related callbacks to FirebaseUI.
const signInCallbacks = {};
signInCallbacks['signInSuccessWithAuthResult'] = (userCredential) => {
resolve(userCredential);
return false;
};
const signInUiShownCallback =
this.configs_[apiKey].getSignInUiShownCallback();
let uiShown = false;
signInCallbacks['uiChanged'] = (fromPageId, toPageId) => {
// Processing redirect result.
if (fromPageId === null && toPageId === 'callback') {
// Hide callback page if available.
const callbackElement = dom.getElementByClass(
'firebaseui-id-page-callback', this.container_);
if (callbackElement) {
element.hide(callbackElement);
}
// Show spinner. This will trigger null -> spinner uiChanged.
this.progressBar_ = new Spinner();
this.progressBar_.render(this.container_);
} else if (!uiShown &&
!(fromPageId === null && toPageId === 'spinner') &&
// Do not trigger callback for immediate federated redirect
// to IdP page.
(toPageId !== 'blank')) {
// Remove spinner if still showing.
if (this.progressBar_) {
this.progressBar_.dispose();
this.progressBar_ = null;
}
// Trigger the signInUiShown callback. This should be triggered once.
uiShown = true;
if (signInUiShownCallback) {
signInUiShownCallback(auth['tenantId']);
}
}
};
signInConfig['callbacks'] = signInCallbacks;
// Do not support `credentialHelper` for sign-in flow.
signInConfig['credentialHelper'] = 'none';
let signInHint;
if (tenantInfo && tenantInfo['email']) {
signInHint = {
'emailHint': tenantInfo['email'],
};
}
const startAuthUi = (signInConfig, signInHint) => {
this.ui_ = new AuthUI(auth);
this.ui_.startWithSignInHint(this.container_, signInConfig, signInHint);
};
// If the AuthUI instance is not null, delete it before re-initialization.
if (this.ui_) {
this.ui_.delete().then(() => {
startAuthUi(signInConfig, signInHint);
});
} else {
startAuthUi(signInConfig, signInHint);
}
});
}