index.jsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import React, { useState } from 'react';
  2. import { Icon, Radio, RadioGroup, Button, ButtonGroup, Switch } from '@douyinfe/semi-ui/';
  3. import Popconfirm from '../..';
  4. import { IconAlertTriangle } from '@douyinfe/semi-icons';
  5. const defaultTitle =
  6. '确定是否要保存此修改?确定是否要保存此修改?确定是否要保存此修改?确定是否要保存此修改?确定是否要保存此修改?确定是否要保存此修改?确定是否要保存此修改?';
  7. const defaultContent =
  8. '此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆此修改将不可逆';
  9. const typeMap = {
  10. default: {
  11. okType: 'primary',
  12. cancelType: 'primary',
  13. icon: <IconAlertTriangle />,
  14. },
  15. warning: {
  16. okType: 'warning',
  17. cancelType: 'warning',
  18. icon: (
  19. <IconAlertTriangle
  20. style={{
  21. color: 'var(--semi-color-warning)',
  22. }}
  23. size="extra-large"
  24. />
  25. ),
  26. },
  27. danger: {
  28. okType: 'danger',
  29. cancelType: 'danger',
  30. icon: (
  31. <IconAlertTriangle
  32. style={{
  33. color: 'var(--semi-color-danger)',
  34. }}
  35. size="extra-large"
  36. />
  37. ),
  38. },
  39. tertiary: {
  40. okType: 'tertiary',
  41. cancelType: 'tertiary',
  42. icon: (
  43. <IconAlertTriangle
  44. style={{
  45. color: 'var(--semi-color-tertiary)',
  46. }}
  47. size="extra-large"
  48. />
  49. ),
  50. },
  51. };
  52. function Demo(props = {}) {
  53. const keys = Object.keys(typeMap);
  54. const [type, setType] = useState('default');
  55. const [title, setTitle] = useState(defaultTitle);
  56. const [content, setContent] = useState(defaultContent);
  57. const [icon, setIcon] = useState(typeMap[type].icon);
  58. const [visible, _setVisible] = useState(true);
  59. const changeType = e => {
  60. const type = e && e.target && e.target.value;
  61. if (type && keys.includes(type)) {
  62. setType(type);
  63. }
  64. };
  65. const setVisible = visible => _setVisible(visible);
  66. const toggleVisible = () => setVisible(!visible);
  67. const toggleTitle = () => setTitle(title ? null : defaultTitle);
  68. const toggleContent = () => setContent(content ? null : defaultContent);
  69. const toggleIcon = () => setIcon(icon ? null : typeMap[type].icon);
  70. return (
  71. <div>
  72. <RadioGroup
  73. onChange={changeType}
  74. value={type}
  75. style={{
  76. marginTop: 14,
  77. marginBottom: 14,
  78. }}
  79. >
  80. {keys.map(key => (
  81. <Radio key={key} value={key}>
  82. <strong
  83. style={{
  84. color: `var(--semi-color-${key === 'default' ? 'primary' : key})`,
  85. }}
  86. >
  87. {key}
  88. </strong>
  89. </Radio>
  90. ))}
  91. </RadioGroup>
  92. <div>
  93. <label>展示title</label>
  94. <Switch checked={Boolean(title)} onChange={toggleTitle} />
  95. </div>
  96. <div>
  97. <label>展示content</label>
  98. <Switch checked={Boolean(content)} onChange={toggleContent} />
  99. </div>
  100. <div>
  101. <label>展示icon</label>
  102. <Switch checked={Boolean(icon)} onChange={toggleIcon} />
  103. </div>
  104. <div>
  105. <Popconfirm
  106. {...typeMap[type]}
  107. icon={icon}
  108. visible={visible}
  109. onVisibleChange={setVisible}
  110. trigger="custom"
  111. title={title}
  112. content={content}
  113. >
  114. <Button onClick={toggleVisible}>点击此处</Button>
  115. </Popconfirm>
  116. </div>
  117. </div>
  118. );
  119. }
  120. export default Demo;