VisAppLink.tsx 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import AppDefaultIcon from '@/new-components/common/AppDefaultIcon';
  2. import { CheckCircleOutlined, ClockCircleOutlined, CloseCircleOutlined, LoadingOutlined } from '@ant-design/icons';
  3. import { Spin, Typography } from 'antd';
  4. import React, { useMemo } from 'react';
  5. interface VisAppLinkProps {
  6. status: string;
  7. app_name: string;
  8. app_desc: string;
  9. msg: string;
  10. }
  11. const VisAppLink: React.FC<{ data: VisAppLinkProps }> = ({ data }) => {
  12. const statusRender = useMemo(() => {
  13. switch (data.status) {
  14. case 'todo':
  15. return <ClockCircleOutlined />;
  16. case 'failed':
  17. return <CloseCircleOutlined className='text-[rgb(255,77,79)]' />;
  18. case 'complete':
  19. return <CheckCircleOutlined className='text-[rgb(82,196,26)]' />;
  20. case 'running':
  21. return <Spin indicator={<LoadingOutlined style={{ fontSize: 24 }} spin />} />;
  22. default:
  23. return null;
  24. }
  25. }, [data]);
  26. if (!data) return null;
  27. return (
  28. <div className='flex flex-col p-2 border pr-4 rounded-md min-w-fit w-2/5'>
  29. <div className='flex items-center justify-between'>
  30. <div className='flex items-center'>
  31. <AppDefaultIcon scene={'chat_agent'} width={8} height={8} />
  32. <div className='flex flex-col flex-1 ml-2'>
  33. <div className='flex items-center text-sm dark:text-[rgba(255,255,255,0.85)] gap-2'>{data?.app_name}</div>
  34. <Typography.Text
  35. className='text-sm text-[#525964] dark:text-[rgba(255,255,255,0.65)] leading-6'
  36. ellipsis={{
  37. tooltip: true,
  38. }}
  39. >
  40. {data?.app_desc}
  41. </Typography.Text>
  42. </div>
  43. </div>
  44. <div className='text-2xl ml-1'>{statusRender}</div>
  45. </div>
  46. {data.status === 'failed' && data.msg && (
  47. <Typography.Text type='danger' className='pl-12 text-xs mt-2'>
  48. {data.msg}
  49. </Typography.Text>
  50. )}
  51. </div>
  52. );
  53. };
  54. export default VisAppLink;