status.tsx 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { ReactNode } from 'react'
  2. import Icon from '../../../../shared/components/icon'
  3. type Status = 'pending' | 'success' | 'error'
  4. type LinkingStatusProps = {
  5. status: Status
  6. description: string | ReactNode
  7. }
  8. export default function LinkingStatus({
  9. status,
  10. description,
  11. }: LinkingStatusProps) {
  12. return (
  13. <span>
  14. <StatusIcon status={status} />
  15. <span className="small"> {description}</span>
  16. </span>
  17. )
  18. }
  19. type StatusIconProps = {
  20. status: Status
  21. }
  22. function StatusIcon({ status }: StatusIconProps) {
  23. switch (status) {
  24. case 'success':
  25. return (
  26. <Icon
  27. type="check-circle"
  28. fw
  29. className="settings-widget-status-icon status-success"
  30. />
  31. )
  32. case 'error':
  33. return (
  34. <Icon
  35. type="times-circle"
  36. fw
  37. className="settings-widget-status-icon status-error"
  38. />
  39. )
  40. case 'pending':
  41. return (
  42. <Icon
  43. type="circle"
  44. fw
  45. className="settings-widget-status-icon status-pending"
  46. spin
  47. />
  48. )
  49. default:
  50. return null
  51. }
  52. }