UNPKG

@kiwicom/smart-faq

Version:

Smart FAQ

111 lines (99 loc) 2.74 kB
// @flow import * as React from 'react'; import type { User, onLogin, onLogout } from '../../types'; export type UserContextType = {| user: User, brand: string, onLogin: onLogin, onLogout: onLogout, ...TokenTypes, |}; type TokenTypes = {| simpleToken: ?string, loginToken: ?string, kwAuthToken: ?string, |}; export const UserContext = React.createContext( ({ user: null, brand: 'kiwicom', loginToken: null, simpleToken: null, kwAuthToken: null, onLogin: () => {}, onLogout: () => Promise.resolve(null), }: UserContextType), ); export const withLogin = <Props>( Component: React.ComponentType<{ onLogin: onLogin } & Props>, ) => function withLoginHOC(props: Props) { return ( <UserContext.Consumer> {({ onLogin }: UserContextType) => ( <Component {...props} onLogin={onLogin} /> )} </UserContext.Consumer> ); }; export const withUser = <Props>( Component: React.ComponentType<{ user: User } & Props>, ) => function withUserHOC(props: Props) { return ( <UserContext.Consumer> {({ user }: UserContextType) => <Component {...props} user={user} />} </UserContext.Consumer> ); }; export const withSimpleToken = <Props>( Component: React.ComponentType<{ simpleToken: ?string } & Props>, ) => function withSimpleTokenHOC(props: Props) { return ( <UserContext.Consumer> {({ simpleToken }: UserContextType) => ( <Component {...props} simpleToken={simpleToken} /> )} </UserContext.Consumer> ); }; export const withLoginToken = <Props>( Component: React.ComponentType<{ loginToken: ?string } & Props>, ) => function withLoginTokenHOC(props: Props) { return ( <UserContext.Consumer> {ctx => <Component {...props} loginToken={ctx && ctx.loginToken} />} </UserContext.Consumer> ); }; export const withKwAuthToken = <Props>( Component: React.ComponentType<{ kwAuthToken: ?string } & Props>, ) => function withKwAuthTokenHOC(props: Props) { return ( <UserContext.Consumer> {({ kwAuthToken }: UserContextType) => ( <Component {...props} kwAuthToken={kwAuthToken} /> )} </UserContext.Consumer> ); }; export const withToken = <Props>( Component: React.ComponentType<{ ...TokenTypes } & Props>, ) => function withTokenHOC(props: Props) { return ( <UserContext.Consumer> {({ simpleToken, loginToken, kwAuthToken }: UserContextType) => ( <Component {...props} simpleToken={simpleToken} loginToken={loginToken} kwAuthToken={kwAuthToken} /> )} </UserContext.Consumer> ); };