blob: 1dd115f020b9332b45dddec46f02832f6f5f10c3 [file] [log] [blame]
<link rel="import" href="../polymer/polymer.html">
<dom-module id="chops-signin-aware">
<template>
</template>
</dom-module>
<script>
'use strict';
// This component adapts chops-signin to an API that is more familiar to Polymer
// components. Use this table to convert from google-signin-aware:
// google-signin-aware chops-signin-aware
// *events*
// google-signin-aware-success user-update
// google-signin-aware-signed-out user-update
// signed-in-changed user-update
// *properties*
// signedIn signedIn
// (getAuthResponse()) authHeaders
// clientId (set window.AUTH_CLIENT_ID)
// scopes (not supported)
// height (not supported)
// theme (not supported)
// (user.getBasicProfile()) profile
class ChopsSigninAware extends Polymer.Element {
static get is() {
return 'chops-signin-aware';
}
static get properties() {
return {
authHeaders: {type: Object, notify: true, readOnly: true},
profile: {type: Object, notify: true, readOnly: true},
signedIn: {type: Boolean, notify: true, readOnly: true},
};
}
constructor() {
super();
this.updateProperties_();
}
connectedCallback() {
// removeEventListener requires exactly the same function object that was
// passed to addEventListener, so bind the listener methods.
this.onUserUpdate_ = this.onUserUpdate_.bind(this);
this.onHeadersReloaded_ = this.onHeadersReloaded_.bind(this);
window.addEventListener('user-update', this.onUserUpdate_);
window.addEventListener(
'authorization-headers-reloaded', this.onHeadersReloaded_);
this.onUserUpdate_();
}
disconnectedCallback() {
window.removeEventListener('user-update', this.onUserUpdate_);
window.removeEventListener(
'authorization-headers-reloaded', this.onHeadersReloaded_);
}
updateProperties_() {
// Use private setters because these properties are read-only to prevent
// clients from accidentally overwriting them.
this._setProfile(window.getUserProfileSync());
this._setAuthHeaders(window.getAuthorizationHeadersSync());
this._setSignedIn(!!this.profile);
}
onHeadersReloaded_(event) {
this.updateProperties_();
}
onUserUpdate_() {
this.updateProperties_();
this.dispatchEvent(new CustomEvent('user-update'));
}
}
customElements.define(ChopsSigninAware.is, ChopsSigninAware);
</script>