ngx-social-button
Version:
Social login/share buttons for Angular 6, 7, 8
204 lines (203 loc) • 17.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { FacebookLoginProvider } from './providers/facebookProvider';
import { GoogleLoginProvider } from './providers/googleProvider';
import { LinkedinLoginProvider } from './providers/linkedinProvider';
import * as i0 from "@angular/core";
/**
* @record
*/
export function SocialServiceConfigItem() { }
/** @type {?} */
SocialServiceConfigItem.prototype.provider;
export class SocialServiceConfig {
/**
* @param {?=} providers
*/
constructor(providers) {
this.providers = new Map();
if (providers) {
for (let i = 0; i < providers.length; i++) {
/** @type {?} */
const element = providers[i];
this.providers.set(element.provider.TYPE, element.provider);
}
}
}
/**
* @return {?}
*/
getProviders() {
return this.providers;
}
/**
* @param {?} provider
* @return {?}
*/
addProvider(provider) {
if (!this.providers.get(provider.TYPE)) {
this.providers.set(provider.TYPE, provider);
}
}
/**
* @param {?} clientId
* @return {?}
*/
addFacebook(clientId) {
this.addProvider(new FacebookLoginProvider(clientId));
return this;
}
/**
* @param {?} clientId
* @return {?}
*/
addGoogle(clientId) {
this.addProvider(new GoogleLoginProvider(clientId));
return this;
}
/**
* @param {?} clientId
* @return {?}
*/
addLinkedIn(clientId) {
this.addProvider(new LinkedinLoginProvider(clientId));
return this;
}
}
if (false) {
/** @type {?} */
SocialServiceConfig.prototype.providers;
}
export class SocialService {
/**
* @param {?} config
*/
constructor(config) {
this._user = null;
this._authState = new BehaviorSubject(null);
this.providers = config.getProviders();
this.providers.forEach((provider, key) => {
provider.initialize().then((user) => {
user.provider = key;
this._user = user;
this._authState.next(user);
}).catch((err) => {
// this._authState.next(null);
});
});
}
/**
* @return {?}
*/
get authState() {
return this._authState.asObservable();
}
/**
* @return {?}
*/
isSocialLoggedIn() {
return (this._user != null);
}
/**
* @param {?} providerType
* @param {?=} share
* @return {?}
*/
sharing(providerType, share) {
return new Promise((resolve, reject) => {
/** @type {?} */
let providerObject = this.providers.get(providerType);
if (providerObject) {
providerObject.sharing(share).then(() => {
resolve(true);
});
}
else {
reject(SocialService.LOGIN_PROVIDER_NOT_FOUND);
}
});
}
/**
* @param {?=} share
* @return {?}
*/
facebookSharing(share) {
return this.sharing('facebook', share);
}
/**
* @param {?} providerType
* @param {?=} scopes
* @return {?}
*/
signIn(providerType, scopes) {
return new Promise((resolve, reject) => {
/** @type {?} */
let providerObject = this.providers.get(providerType);
if (providerObject) {
providerObject.signIn(scopes).then((user) => {
user.provider = providerType;
resolve(user);
this._user = user;
this._authState.next(user);
}).catch((err) => {
reject(SocialService.USER_POPUP_CLOSE);
});
}
else {
reject(SocialService.LOGIN_PROVIDER_NOT_FOUND);
}
});
}
/**
* @return {?}
*/
signOut() {
return new Promise((resolve, reject) => {
if (this._user && this._user.provider) {
/** @type {?} */
let providerType = this._user.provider;
/** @type {?} */
let providerObject = this.providers.get(providerType);
providerObject.signOut().then(() => {
this._user = null;
this._authState.next(null);
resolve();
}).catch((err) => {
this._authState.next(null);
});
}
else {
reject(SocialService.LOGIN_PROVIDER_NOT_FOUND);
}
});
}
}
SocialService.LOGIN_PROVIDER_NOT_FOUND = 'Login provider not found';
SocialService.USER_POPUP_CLOSE = 'User close the popup';
SocialService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] },
];
/** @nocollapse */
SocialService.ctorParameters = () => [
{ type: SocialServiceConfig }
];
/** @nocollapse */ SocialService.ngInjectableDef = i0.defineInjectable({ factory: function SocialService_Factory() { return new SocialService(i0.inject(SocialServiceConfig)); }, token: SocialService, providedIn: "root" });
if (false) {
/** @type {?} */
SocialService.LOGIN_PROVIDER_NOT_FOUND;
/** @type {?} */
SocialService.USER_POPUP_CLOSE;
/** @type {?} */
SocialService.prototype.providers;
/** @type {?} */
SocialService.prototype._user;
/** @type {?} */
SocialService.prototype._authState;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29jaWFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc29jaWFsLWJ1dHRvbi8iLCJzb3VyY2VzIjpbImxpYi9zb2NpYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUMsZUFBZSxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBR2pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQVNuRSxNQUFNOzs7O0lBR0YsWUFBWSxTQUFxQzt5QkFGRCxJQUFJLEdBQUcsRUFBeUI7UUFHNUUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNaLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOztnQkFDeEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDL0Q7U0FDSjtLQUNKOzs7O0lBRUQsWUFBWTtRQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0tBQ3pCOzs7OztJQUVPLFdBQVcsQ0FBQyxRQUF1QjtRQUN2QyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLFNBQVMs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QyxDQUFDO2lCQUM5QixDQUFDLENBQUM7YUFDTjtZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUNsRDtTQUNKLENBQUMsQ0FBQztLQUNOOzt5Q0FyRmtELDBCQUEwQjtpQ0FDbEMsc0JBQXNCOztZQU5wRSxVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7Ozs7WUFldUIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0xvZ2luUHJvdmlkZXJ9IGZyb20gJy4vZW50aXRpZXMvbG9naW5Qcm92aWRlcic7XG5pbXBvcnQge0ZhY2Vib29rTG9naW5Qcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvZmFjZWJvb2tQcm92aWRlcic7XG5pbXBvcnQge0dvb2dsZUxvZ2luUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2dvb2dsZVByb3ZpZGVyJztcbmltcG9ydCB7TGlua2VkaW5Mb2dpblByb3ZpZGVyfSBmcm9tICcuL3Byb3ZpZGVycy9saW5rZWRpblByb3ZpZGVyJztcblxuaW1wb3J0IHtTb2NpYWxVc2VyfSBmcm9tICcuL2VudGl0aWVzL3VzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvY2lhbFNlcnZpY2VDb25maWdJdGVtIHtcbiAgICBwcm92aWRlcjogTG9naW5Qcm92aWRlcjtcbn1cblxuXG5leHBvcnQgY2xhc3MgU29jaWFsU2VydmljZUNvbmZpZyB7XG4gICAgcHJpdmF0ZSBwcm92aWRlcnM6IE1hcDxzdHJpbmcsIExvZ2luUHJvdmlkZXI+ID0gbmV3IE1hcDxzdHJpbmcsIExvZ2luUHJvdmlkZXI+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm92aWRlcnM/OiBTb2NpYWxTZXJ2aWNlQ29uZmlnSXRlbVtdKSB7XG4gICAgICAgIGlmIChwcm92aWRlcnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHByb3ZpZGVyc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQoZWxlbWVudC5wcm92aWRlci5UWVBFLCBlbGVtZW50LnByb3ZpZGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb3ZpZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkUHJvdmlkZXIocHJvdmlkZXI6IExvZ2luUHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXIuVFlQRSkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChwcm92aWRlci5UWVBFLCBwcm92aWRlcik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGFkZEZhY2Vib29rKGNsaWVudElkOiBzdHJpbmcpOiBTb2NpYWxTZXJ2aWNlQ29uZmlnIHtcbiAgICAgICAgdGhpcy5hZGRQcm92aWRlcihuZXcgRmFjZWJvb2tMb2dpblByb3ZpZGVyKGNsaWVudElkKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFkZEdvb2dsZShjbGllbnRJZDogc3RyaW5nKTogU29jaWFsU2VydmljZUNvbmZpZyB7XG4gICAgICAgIHRoaXMuYWRkUHJvdmlkZXIobmV3IEdvb2dsZUxvZ2luUHJvdmlkZXIoY2xpZW50SWQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYWRkTGlua2VkSW4oY2xpZW50SWQ6IHN0cmluZyk6IFNvY2lhbFNlcnZpY2VDb25maWcge1xuICAgICAgICB0aGlzLmFkZFByb3ZpZGVyKG5ldyBMaW5rZWRpbkxvZ2luUHJvdmlkZXIoY2xpZW50SWQpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU29jaWFsU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMT0dJTl9QUk9WSURFUl9OT1RfRk9VTkQgPSAnTG9naW4gcHJvdmlkZXIgbm90IGZvdW5kJztcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVU0VSX1BPUFVQX0NMT1NFID0gJ1VzZXIgY2xvc2UgdGhlIHBvcHVwJztcblxuICAgIHByaXZhdGUgcHJvdmlkZXJzOiBNYXA8c3RyaW5nLCBMb2dpblByb3ZpZGVyPjtcblxuICAgIHByaXZhdGUgX3VzZXI6IFNvY2lhbFVzZXIgPSBudWxsO1xuICAgIHByaXZhdGUgX2F1dGhTdGF0ZTogQmVoYXZpb3JTdWJqZWN0PFNvY2lhbFVzZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICAgIGdldCBhdXRoU3RhdGUoKTogT2JzZXJ2YWJsZTxTb2NpYWxVc2VyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoU3RhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBTb2NpYWxTZXJ2aWNlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gY29uZmlnLmdldFByb3ZpZGVycygpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5mb3JFYWNoKChwcm92aWRlcjogTG9naW5Qcm92aWRlciwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHByb3ZpZGVyLmluaXRpYWxpemUoKS50aGVuKCh1c2VyOiBTb2NpYWxVc2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgdXNlci5wcm92aWRlciA9IGtleTtcbiAgICAgICAgICAgICAgICB0aGlzLl91c2VyID0gdXNlcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRoU3RhdGUubmV4dCh1c2VyKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9hdXRoU3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1NvY2lhbExvZ2dlZEluKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3VzZXIgIT0gbnVsbCk7XG4gICAgfVxuXG5cbiAgICBzaGFyaW5nKHByb3ZpZGVyVHlwZTogc3RyaW5nLCBzaGFyZT86IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHByb3ZpZGVyT2JqZWN0ID0gdGhpcy5wcm92aWRlcnMuZ2V0KHByb3ZpZGVyVHlwZSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlck9iamVjdC5zaGFyaW5nKHNoYXJlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFNvY2lhbFNlcnZpY2UuTE9HSU5fUFJPVklERVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tTaGFyaW5nKHNoYXJlPzogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNoYXJpbmcoJ2ZhY2Vib29rJywgc2hhcmUpO1xuICAgIH1cblxuICAgIC8vIGxpbmtlZGluU2hhcmluZyhzaGFyZT86IGFueSkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5zaGFyaW5nKCdsaW5rZWRpbicsIHNoYXJlKTtcbiAgICAvLyB9XG5cbiAgICBzaWduSW4ocHJvdmlkZXJUeXBlOiBzdHJpbmcsIHNjb3Blcz86IFtzdHJpbmddKTogUHJvbWlzZTxTb2NpYWxVc2VyPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcHJvdmlkZXJPYmplY3QgPSB0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXJUeXBlKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyT2JqZWN0LnNpZ25JbihzY29wZXMpLnRoZW4oKHVzZXI6IFNvY2lhbFVzZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5wcm92aWRlciA9IHByb3ZpZGVyVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlciA9IHVzZXI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2F1dGhTdGF0ZS5uZXh0KHVzZXIpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFNvY2lhbFNlcnZpY2UuVVNFUl9QT1BVUF9DTE9TRSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChTb2NpYWxTZXJ2aWNlLkxPR0lOX1BST1ZJREVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25PdXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl91c2VyICYmIHRoaXMuX3VzZXIucHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJUeXBlID0gdGhpcy5fdXNlci5wcm92aWRlcjtcbiAgICAgICAgICAgICAgICBsZXQgcHJvdmlkZXJPYmplY3QgPSB0aGlzLnByb3ZpZGVycy5nZXQocHJvdmlkZXJUeXBlKTtcbiAgICAgICAgICAgICAgICBwcm92aWRlck9iamVjdC5zaWduT3V0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRoU3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0aFN0YXRlLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlamVjdChTb2NpYWxTZXJ2aWNlLkxPR0lOX1BST1ZJREVSX05PVF9GT1VORCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxufVxuIl19