ProviderSelect.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import classNames from 'classnames';
  2. import { Badge } from 'antd';
  3. import { StatusColorEnum } from '@/components/BadgeStatus';
  4. import styles from '@/pages/link/AccessConfig/index.less';
  5. import { TableCard } from '@/components';
  6. import './providerSelect.less';
  7. interface ProviderProps {
  8. value?: string;
  9. options?: any[];
  10. onChange?: (id: string) => void;
  11. onSelect?: (id: string, rowData: any) => void;
  12. }
  13. const defaultImage = require('/public/images/device-access.png');
  14. export default (props: ProviderProps) => {
  15. return (
  16. <div className={'provider-list'}>
  17. {props.options && props.options.length
  18. ? props.options.map((item) => (
  19. <div
  20. onClick={() => {
  21. if (props.onChange) {
  22. props.onChange(item.id);
  23. }
  24. if (props.onSelect) {
  25. props.onSelect(item.id, item);
  26. }
  27. }}
  28. style={{ padding: 16 }}
  29. >
  30. <TableCard
  31. className={classNames({ active: item.id === props.value })}
  32. showMask={false}
  33. showTool={false}
  34. status={item.state.value}
  35. statusText={item.state.text}
  36. statusNames={{
  37. enabled: StatusColorEnum.processing,
  38. disabled: StatusColorEnum.error,
  39. }}
  40. >
  41. <div className={styles.context}>
  42. <div>
  43. <img width={88} height={88} src={defaultImage} alt={''} />
  44. </div>
  45. <div className={styles.card}>
  46. <div className={styles.header}>
  47. <div className={styles.title}>{item.name || '--'}</div>
  48. <div className={styles.desc}>{item.description || '--'}</div>
  49. </div>
  50. <div className={styles.container}>
  51. <div className={styles.server}>
  52. <div className={styles.subTitle}>{item?.channelInfo?.name || '--'}</div>
  53. <div style={{ width: '100%' }}>
  54. {item.channelInfo?.addresses.map((i: any, index: number) => (
  55. <p key={i.address + `_address${index}`}>
  56. <Badge color={i.health === -1 ? 'red' : 'green'} text={i.address} />
  57. </p>
  58. ))}
  59. </div>
  60. </div>
  61. <div className={styles.procotol}>
  62. <div className={styles.subTitle}>{item?.protocolDetail?.name || '--'}</div>
  63. <p>{item.protocolDetail?.description || '--'}</p>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. </TableCard>
  69. </div>
  70. ))
  71. : null}
  72. </div>
  73. );
  74. };