Vulcan/packages/nova-base-containers/lib/containers/withCurrentUser.js

30 lines
1.1 KiB
JavaScript
Raw Normal View History

import React, { Component, PropTypes } from 'react';
2016-11-15 18:33:16 +01:00
import hoistStatics from 'hoist-non-react-statics';
import { Meteor } from 'meteor/meteor';
import Telescope from 'meteor/nova:lib';
/**
* withCurrentUser - HOC to give access to the currentUser as a prop of a WrappedComponent
**/
export default function withCurrentUser(WrappedComponent) {
class WithCurrentUser extends Component {
constructor(...args) {
super(...args);
}
render() {
const {client} = context; // grab the apollo client from the context
2016-11-15 18:33:16 +01:00
const currentUser = client ? client.store.getState().apollo.data[`User${Meteor.userId()}`] : null;
2016-11-15 18:33:16 +01:00
return currentUser ? <WrappedComponent currentUser={currentUser} {...props} /> : <WrappedComponent {...props} />;
}
2016-11-15 18:33:16 +01:00
}
WithCurrentUser.contextTypes = { client: PropTypes.object.isRequired };
2016-11-15 18:33:16 +01:00
WithCurrentUser.displayName = `withCurrentUser(${Telescope.utils.getComponentDisplayName(WrappedComponent)}`;
WithCurrentUser.WrappedComponent = WrappedComponent;
return hoistStatics(WithCurrentUser, WrappedComponent);
2016-11-15 18:33:16 +01:00
}