NotAvailable.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React, { type JSX } from 'react';
  2. import { Disable } from 'react-disable';
  3. import type { UncontrolledTooltipProps } from 'reactstrap';
  4. import {
  5. PopoverBody,
  6. UncontrolledPopover,
  7. UncontrolledTooltip,
  8. } from 'reactstrap';
  9. type NotAvailableProps = {
  10. children: JSX.Element;
  11. isDisabled: boolean;
  12. title: string | JSX.Element;
  13. classNamePrefix?: string;
  14. placement?: UncontrolledTooltipProps['placement'];
  15. };
  16. export const NotAvailable = ({
  17. children,
  18. isDisabled,
  19. title,
  20. classNamePrefix = 'grw-not-available',
  21. placement = 'top',
  22. }: NotAvailableProps): JSX.Element => {
  23. if (!isDisabled) {
  24. return children;
  25. }
  26. const id = `${classNamePrefix}-${Math.random().toString(32).substring(2)}`;
  27. return (
  28. <>
  29. <div id={id}>
  30. <Disable disabled={isDisabled}>{children}</Disable>
  31. </div>
  32. {typeof title === 'string' ? (
  33. <UncontrolledTooltip placement={placement} target={id}>
  34. {title}
  35. </UncontrolledTooltip>
  36. ) : (
  37. <UncontrolledPopover trigger="hover" placement={placement} target={id}>
  38. <PopoverBody>{title}</PopoverBody>
  39. </UncontrolledPopover>
  40. )}
  41. </>
  42. );
  43. };