34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { createSelector } from 'reselect';
|
|
import isEmpty from 'lodash/isEmpty';
|
|
|
|
import { IApplicationState, IUser } from '../definitions';
|
|
|
|
interface IServices {
|
|
facebook: { clientId: string };
|
|
github: { clientId: string };
|
|
gitlab: { clientId: string };
|
|
google: { clientId: string };
|
|
linkedin: { clientId: string };
|
|
'meteor-developer': { clientId: string };
|
|
wordpress: { clientId: string; serverURL: string };
|
|
}
|
|
|
|
const getUser = (state: IApplicationState): Partial<IUser> => {
|
|
if (!isEmpty(state.share?.user)) {
|
|
return state.share.user;
|
|
}
|
|
return state.login?.user;
|
|
};
|
|
const getLoginServices = (state: IApplicationState) => (state.login.services as IServices) || {};
|
|
const getShowFormLoginSetting = (state: IApplicationState) => (state.settings.Accounts_ShowFormLogin as boolean) || false;
|
|
const getIframeEnabledSetting = (state: IApplicationState) => (state.settings.Accounts_iframe_enabled as boolean) || false;
|
|
|
|
// TODO: we need to change 42 files to fix a correct type, i believe is better to do this later
|
|
export const getUserSelector = createSelector([getUser], user => user) as any;
|
|
|
|
export const getShowLoginButton = createSelector(
|
|
[getLoginServices, getShowFormLoginSetting, getIframeEnabledSetting],
|
|
(loginServices, showFormLogin, iframeEnabled) =>
|
|
(showFormLogin || Object.values(loginServices).length || iframeEnabled) as boolean
|
|
);
|