NotAvailableForGuest.jsx 940 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { UncontrolledTooltip } from 'reactstrap';
  4. import { useIsGuestUser } from '~/stores/context';
  5. const NotAvailableForGuest = (props) => {
  6. const { children } = props;
  7. const { data: isGuestUser } = useIsGuestUser();
  8. if (!isGuestUser) {
  9. return props.children;
  10. }
  11. const id = children.props.id || `grw-not-available-for-guest-${Math.random().toString(32).substring(2)}`;
  12. // clone and add className
  13. const clonedChild = React.cloneElement(children, {
  14. id,
  15. className: `${children.props.className} grw-not-available-for-guest`,
  16. onClick: () => { /* do nothing */ },
  17. });
  18. return (
  19. <>
  20. { clonedChild }
  21. <UncontrolledTooltip placement="top" target={id}>Not available for guest</UncontrolledTooltip>
  22. </>
  23. );
  24. };
  25. NotAvailableForGuest.propTypes = {
  26. children: PropTypes.node.isRequired,
  27. };
  28. export default NotAvailableForGuest;