checkbox.stories.js 29 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  1. import React, { useCallback, useMemo, useState } from 'react';
  2. import Button from '../../button';
  3. import Popover from '../../popover';
  4. import Tag from '../../tag';
  5. import Cascader from '../../cascader';
  6. import Checkbox from '../index';
  7. import CheckboxGroup from '../checkboxGroup';
  8. import { Col, Input, Row } from '../../index';
  9. import { IconClose } from '@douyinfe/semi-icons';
  10. export default {
  11. title: 'Checkbox',
  12. }
  13. export const CheckboxDefault = () => {
  14. return (
  15. <div>
  16. <Checkbox onChange={e => console.log(e)} value={1} onChange={v => console.log(v)}>
  17. hello
  18. </Checkbox>
  19. <br />
  20. <Checkbox checked>这是一个受控的checked=true的checkbox,没有配onChange</Checkbox>
  21. <br />
  22. <Checkbox defaultChecked>这是一个不受控的defaultChecked=true的checkbox</Checkbox>
  23. <br />
  24. <Checkbox disabled>这是一个受控的disabled=true的checkbox</Checkbox>
  25. <br />
  26. <Checkbox checked disabled>
  27. 既checked又disabled
  28. </Checkbox>
  29. <br />
  30. <Checkbox indeterminate>indeterminate</Checkbox>
  31. </div>
  32. );
  33. };
  34. export const CheckboxWithoutText = () => {
  35. return (
  36. <div>
  37. <Checkbox onChange={e => console.log(e)} />
  38. </div>
  39. );
  40. };
  41. class CheckboxControl extends React.Component {
  42. state = {
  43. checked: true,
  44. disabled: false,
  45. };
  46. toggleChecked = () => {
  47. this.setState({
  48. checked: !this.state.checked,
  49. });
  50. };
  51. toggleDisable = () => {
  52. this.setState({
  53. disabled: !this.state.disabled,
  54. });
  55. };
  56. onChange = e => {
  57. console.log('checked = ', e.target.checked);
  58. this.setState({
  59. checked: e.target.checked,
  60. });
  61. };
  62. render() {
  63. const label = `${this.state.checked ? 'Checked' : 'Unchecked'}-${
  64. this.state.disabled ? 'Disabled' : 'Enabled'
  65. }`;
  66. return (
  67. <div>
  68. <p
  69. style={{
  70. marginBottom: '20px',
  71. }}
  72. >
  73. <Checkbox
  74. checked={this.state.checked}
  75. disabled={this.state.disabled}
  76. onChange={this.onChange}
  77. >
  78. {label}
  79. </Checkbox>
  80. </p>
  81. <p>
  82. <Button type="primary" size="small" onClick={this.toggleChecked}>
  83. {!this.state.checked ? 'Check' : 'Uncheck'}
  84. </Button>
  85. <Button
  86. style={{
  87. marginLeft: '10px',
  88. }}
  89. type="primary"
  90. size="small"
  91. onClick={this.toggleDisable}
  92. >
  93. {!this.state.disabled ? 'Disable' : 'Enable'}
  94. </Button>
  95. </p>
  96. </div>
  97. );
  98. }
  99. }
  100. export const CheckboxControlledDisabledChecked = () => <CheckboxControl />;
  101. CheckboxControlledDisabledChecked.story = {
  102. name: 'checkbox controlled disabled & checked',
  103. };
  104. class GroupDemo extends React.Component {
  105. constructor() {
  106. super();
  107. this.state = {
  108. value: [],
  109. };
  110. this.onChange = this.onChange.bind(this);
  111. }
  112. onChange(value) {
  113. console.log(value);
  114. this.setState({
  115. value: value,
  116. });
  117. }
  118. render() {
  119. let { value } = this.state;
  120. return (
  121. <>
  122. 水平Group
  123. <Checkbox.Group direction="horizontal" onChange={v => console.log(v)}>
  124. <Checkbox value="dy">抖音</Checkbox>
  125. <Checkbox value="hotsoon">火山</Checkbox>
  126. <Checkbox value="toutiao">今日头条</Checkbox>
  127. <Checkbox value="xigua">西瓜视频</Checkbox>
  128. </Checkbox.Group>
  129. <br />
  130. <br />
  131. 垂直Group
  132. <Checkbox.Group onChange={v => console.log(v)}>
  133. <Checkbox value="dy">抖音</Checkbox>
  134. <Checkbox value="hotsoon">火山</Checkbox>
  135. <Checkbox value="toutiao">今日头条</Checkbox>
  136. <Checkbox value="xigua">西瓜视频</Checkbox>
  137. </Checkbox.Group>
  138. <br />
  139. <br />
  140. 默认Group
  141. <Checkbox.Group direction="horizontal" defaultValue={['xigua']} onChange={console.log}>
  142. <Checkbox value="dy">抖音</Checkbox>
  143. <Checkbox value="hotsoon">火山</Checkbox>
  144. <Checkbox value="toutiao">今日头条</Checkbox>
  145. <Checkbox value="xigua">西瓜视频</Checkbox>
  146. </Checkbox.Group>
  147. <br />
  148. <br />
  149. 受控Group
  150. <Checkbox.Group direction="horizontal" value={value} onChange={console.log}>
  151. <Checkbox value="dy">抖音</Checkbox>
  152. <Checkbox value="hotsoon">火山</Checkbox>
  153. <Checkbox value="toutiao">今日头条</Checkbox>
  154. <Checkbox value="xigua">西瓜视频</Checkbox>
  155. </Checkbox.Group>
  156. <br />
  157. <br />
  158. 受控Group+onChange
  159. <Checkbox.Group direction="horizontal" value={value} onChange={this.onChange}>
  160. <Checkbox value="dy">抖音</Checkbox>
  161. <Checkbox value="hotsoon">火山</Checkbox>
  162. <Checkbox value="toutiao">今日头条</Checkbox>
  163. <Checkbox value="xigua">西瓜视频</Checkbox>
  164. </Checkbox.Group>
  165. <br />
  166. <br />
  167. disabled
  168. <Checkbox.Group disabled>
  169. <Checkbox value="dy">抖音</Checkbox>
  170. <Checkbox value="hotsoon">火山</Checkbox>
  171. <Checkbox value="toutiao">今日头条</Checkbox>
  172. <Checkbox value="xigua">西瓜视频</Checkbox>
  173. </Checkbox.Group>
  174. </>
  175. );
  176. }
  177. }
  178. export const CheckboxGroupDemo = () => <GroupDemo />;
  179. export const CheckboxGroupWithOptions = () => {
  180. function onChange(checkedValues) {
  181. console.log('checked = ', checkedValues);
  182. }
  183. const plainOptions = ['green', 'red', 'pink'];
  184. const options = [
  185. {
  186. label: 'green',
  187. value: 'green',
  188. },
  189. {
  190. label: 'red',
  191. value: 'red',
  192. },
  193. {
  194. label: 'pink',
  195. value: 'pink',
  196. disabled: true,
  197. },
  198. ];
  199. const optionsWithDisabled = [
  200. {
  201. label: 'green',
  202. value: 'green',
  203. },
  204. {
  205. label: 'red',
  206. value: 'red',
  207. },
  208. {
  209. label: 'pink',
  210. value: 'pink',
  211. disabled: false,
  212. },
  213. ];
  214. return (
  215. <div>
  216. default
  217. <CheckboxGroup options={plainOptions} defaultValue={['green']} onChange={onChange} />
  218. <br />
  219. <br />
  220. 受控
  221. <CheckboxGroup options={plainOptions} value={['green']} onChange={onChange} />
  222. <br />
  223. 最后一个disabled
  224. <br />
  225. <CheckboxGroup options={options} defaultValue={['red']} onChange={onChange} />
  226. <br />
  227. 全体disabled, 优先父级disabled,次选子级disabled
  228. <br />
  229. <CheckboxGroup
  230. options={optionsWithDisabled}
  231. disabled
  232. defaultValue={['green']}
  233. onChange={onChange}
  234. />
  235. </div>
  236. );
  237. };
  238. export const CheckboxGroupWithOtherTypeChild = () => {
  239. return (
  240. <CheckboxGroup>
  241. <div className="test">
  242. <Checkbox value="green" extra="苹果">
  243. green
  244. </Checkbox>
  245. <Checkbox value="red" extra="梨">
  246. red
  247. </Checkbox>
  248. <Checkbox value="pink" extra="橙子">
  249. pink
  250. </Checkbox>
  251. </div>
  252. </CheckboxGroup>
  253. );
  254. };
  255. CheckboxGroupWithOtherTypeChild.story = {
  256. name: 'checkboxGroup-直接后代是其他类型Node',
  257. };
  258. export const CheckboxExtra = () => {
  259. let options = [
  260. {
  261. label: 'green',
  262. value: 'green',
  263. extra: '苹果',
  264. },
  265. {
  266. label: 'red',
  267. value: 'red',
  268. extra: '梨',
  269. },
  270. {
  271. label: 'pink',
  272. value: 'pink',
  273. disabled: true,
  274. extra: '橙子',
  275. },
  276. ];
  277. return (
  278. <div>
  279. checkbox
  280. <Checkbox
  281. onChange={e => console.log(e)}
  282. extra="我是副文本,这是辅助的文本,辅助文本会更长一些,甚至还可能换行"
  283. >
  284. 我是主文本
  285. </Checkbox>
  286. <Checkbox
  287. style={{
  288. width: 200,
  289. }}
  290. onChange={e => console.log(e)}
  291. extra="我是副文本,这是辅助的文本,辅助文本会更长一些,甚至还可能换行"
  292. >
  293. 我是主文本
  294. </Checkbox>
  295. <br />
  296. <br />
  297. checkboxGroup
  298. <CheckboxGroup>
  299. <Checkbox value="green" extra="苹果">
  300. green
  301. </Checkbox>
  302. <Checkbox value="red" extra="梨">
  303. red
  304. </Checkbox>
  305. <Checkbox value="pink" extra="橙子">
  306. pink
  307. </Checkbox>
  308. </CheckboxGroup>
  309. <br />
  310. <br />
  311. checkboxGroup with options
  312. <CheckboxGroup options={options}></CheckboxGroup>
  313. </div>
  314. );
  315. };
  316. export const CheckboxGrid = () => {
  317. return (
  318. <Checkbox.Group
  319. style={{
  320. width: '100%',
  321. }}
  322. onChange={v => console.log(v)}
  323. >
  324. <Row>
  325. <Col span={8}>
  326. <Checkbox value="A">
  327. 无限长的一串字The Storybook webapp UI can be customised with this addon. It can be used
  328. to change the header, show/hide various UI elements and to enable full-screen mode by
  329. default.
  330. </Checkbox>
  331. </Col>
  332. <Col span={8}>
  333. <Checkbox value="B">B</Checkbox>
  334. </Col>
  335. <Col span={8}>
  336. <Checkbox value="C">C</Checkbox>
  337. </Col>
  338. <Col span={8}>
  339. <Checkbox value="D">D</Checkbox>
  340. </Col>
  341. <Col span={8}>
  342. <Checkbox value="E">E</Checkbox>
  343. </Col>
  344. </Row>
  345. </Checkbox.Group>
  346. );
  347. };
  348. CheckboxGrid.story = {
  349. name: 'checkbox + grid',
  350. };
  351. export const IndeterminateDemo = () => {
  352. const options = ['yellow', 'green', 'red'];
  353. const defaultCheckedColors = ['yellow', 'red'];
  354. const [checkedList, setCheckList] = useState(defaultCheckedColors);
  355. const [indeterminate, setIndeterminate] = useState(true);
  356. const [checkAll, setCheckAll] = useState(false);
  357. const onCheckListChange = checkedList => {
  358. setCheckList([...checkedList]);
  359. setIndeterminate(!!checkedList.length && checkedList.length < options.length);
  360. setCheckAll(checkedList.length === options.length);
  361. };
  362. const onCheckAllChange = e => {
  363. setCheckList([...(e.target.checked ? options : [])]);
  364. setIndeterminate(false);
  365. setCheckAll(e.target.checked);
  366. };
  367. return (
  368. <div>
  369. <div
  370. style={{
  371. borderBottom: '1px solid #E9E9E9',
  372. }}
  373. >
  374. <Checkbox indeterminate={indeterminate} onChange={onCheckAllChange} checked={checkAll}>
  375. Check all
  376. </Checkbox>
  377. </div>
  378. <br />
  379. <CheckboxGroup options={options} value={checkedList} onChange={onCheckListChange} />
  380. </div>
  381. );
  382. };
  383. export const CheckboxRenderInDiv = () => (
  384. <>
  385. <div
  386. onClick={(...args) => {
  387. console.log('clicked checkbox outer: ', ...args);
  388. }}
  389. >
  390. <Checkbox
  391. onChange={(...args) => {
  392. console.log('clicked checkbox: ', ...args);
  393. }}
  394. />
  395. </div>
  396. </>
  397. );
  398. export const CheckboxInPopover = () => (
  399. <div>
  400. <Popover
  401. content={
  402. <div>
  403. <Checkbox>选项一</Checkbox>
  404. <Checkbox defaultChecked>选项二</Checkbox>
  405. <Checkbox>选项三</Checkbox>
  406. </div>
  407. }
  408. >
  409. <Button>click me</Button>
  410. </Popover>
  411. </div>
  412. )
  413. const SwitchCheckedFromTrue2Undefined = () => {
  414. const [props, setProps] = useState();
  415. const [flag, setFlag] = useState(0);
  416. const change = () => {
  417. if (flag === 0) {
  418. setFlag(1);
  419. setProps({ checked: true });
  420. } else {
  421. setFlag(0);
  422. setProps({ checked: false });
  423. }
  424. };
  425. return (
  426. <>
  427. <Checkbox {...props}>123</Checkbox>
  428. <Button onClick={() => change()}>switch</Button>
  429. </>
  430. );
  431. };
  432. export const CheckboxSwitchCheckedTrueUndefined = () => <SwitchCheckedFromTrue2Undefined />;
  433. CheckboxSwitchCheckedTrueUndefined.story = {
  434. name: 'checkbox switch checked: true => undefined',
  435. };
  436. const TransformSelect = props => {
  437. const { onChange, value, options = [], defaultValue = [], placeholder } = props;
  438. const [currentValue, setCurrentValue] = useState([]);
  439. const [inputValue, setInputValue] = useState(''); // 变化
  440. const onSelectChange = useCallback(() => {
  441. setCurrentValue(currentValue);
  442. onChange && onChange(currentValue);
  443. }, []); // 选择某一个
  444. const removeValue = useCallback(
  445. currentIndex => {
  446. currentValue.splice(currentIndex, 1);
  447. onSelectChange([...currentValue]);
  448. },
  449. [currentValue]
  450. ); // 选择所有
  451. const selectAllValue = useCallback(() => {
  452. const value = options.map(option => option.value);
  453. onSelectChange(value);
  454. }, [options]);
  455. const viewsOptions = useMemo(() => {
  456. if (inputValue) {
  457. const newOptions = options.filter(option => option.label.indexOf(inputValue) !== -1);
  458. return newOptions;
  459. }
  460. return options;
  461. }, [options, inputValue]);
  462. return (
  463. <div>
  464. <div>
  465. <div>
  466. <Input
  467. value={inputValue}
  468. prefix="search"
  469. clearable
  470. onChange={value => setInputValue(value)}
  471. placeholder={placeholder}
  472. />
  473. </div>
  474. <div>
  475. <span>{`共 ${options.length} 项`}</span>
  476. <Button type="tertiary" size="small" theme="borderless" onClick={() => selectAllValue()}>
  477. 全选
  478. </Button>
  479. </div>
  480. <div>
  481. <CheckboxGroup
  482. options={viewsOptions}
  483. value={currentValue}
  484. onChange={onSelectChange}
  485. direction="vertical"
  486. />
  487. </div>
  488. </div>
  489. <div>
  490. <div>
  491. <span>{`已选 ${currentValue.length} 项`}</span>
  492. <Button
  493. type="tertiary"
  494. size="small"
  495. theme="borderless"
  496. onClick={() => onSelectChange([])}
  497. >
  498. 清空
  499. </Button>
  500. </div>
  501. <div>
  502. {currentValue.length > 0 ? (
  503. currentValue.map((value, idx) => {
  504. // 不存在不需要展示
  505. const option = options.find(option => option.value === value);
  506. return (
  507. <div key={option.key ? option.key : idx}>
  508. <span>{option.label}</span>
  509. <span onClick={() => removeValue(idx)}>
  510. <IconClose size="small" />
  511. </span>
  512. </div>
  513. );
  514. })
  515. ) : (
  516. <div>暂无内容,可从左侧勾选</div>
  517. )}
  518. </div>
  519. </div>
  520. </div>
  521. );
  522. };
  523. export const BugDemo = () => <TransformSelect />;
  524. export const CheckboxGroupCardStyle = () => (
  525. <>
  526. <div>常见情况</div>
  527. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  528. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  529. 多选框标题
  530. </Checkbox>
  531. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  532. 多选框标题
  533. </Checkbox>
  534. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  535. 多选框标题
  536. </Checkbox>
  537. </CheckboxGroup>
  538. <br />
  539. <br />
  540. <div>radio disabled</div>
  541. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  542. <Checkbox value="1" disabled extra="Semi Design" style={{ width: 280 }}>
  543. 多选框标题
  544. </Checkbox>
  545. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  546. 多选框标题
  547. </Checkbox>
  548. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  549. 多选框标题
  550. </Checkbox>
  551. </CheckboxGroup>
  552. <br />
  553. <br />
  554. <div>checkboxGroup disabled</div>
  555. <CheckboxGroup type="card" direction="horizontal" disabled defaultValue={['1']}>
  556. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  557. 多选框标题
  558. </Checkbox>
  559. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  560. 多选框标题
  561. </Checkbox>
  562. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  563. 多选框标题
  564. </Checkbox>
  565. </CheckboxGroup>
  566. <br />
  567. <br />
  568. <div>文字很长,并且没有设置宽度,因此换行显示</div>
  569. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  570. <Checkbox
  571. value="1"
  572. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  573. >
  574. 多选框标题
  575. </Checkbox>
  576. <Checkbox
  577. value="2"
  578. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  579. >
  580. 多选框标题
  581. </Checkbox>
  582. <Checkbox
  583. value="3"
  584. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  585. >
  586. 多选框标题
  587. </Checkbox>
  588. </CheckboxGroup>
  589. <br />
  590. <br />
  591. <div>设置了width=180</div>
  592. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  593. <Checkbox
  594. value="1"
  595. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  596. style={{ width: 180 }}
  597. >
  598. 多选框标题
  599. </Checkbox>
  600. <Checkbox
  601. value="2"
  602. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  603. style={{ width: 180 }}
  604. >
  605. 多选框标题
  606. </Checkbox>
  607. <Checkbox
  608. value="3"
  609. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  610. style={{ width: 180 }}
  611. >
  612. 多选框标题
  613. </Checkbox>
  614. </CheckboxGroup>
  615. <br />
  616. <br />
  617. <div>没有extra,width=180</div>
  618. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  619. <Checkbox value="1" style={{ width: 180 }}>
  620. 多选框标题
  621. </Checkbox>
  622. <Checkbox value="2" style={{ width: 180 }}>
  623. 多选框标题
  624. </Checkbox>
  625. <Checkbox value="3" style={{ width: 180 }}>
  626. 多选框标题
  627. </Checkbox>
  628. </CheckboxGroup>
  629. <br />
  630. <br />
  631. <div>没有标题,width=380</div>
  632. <CheckboxGroup type="card" direction="horizontal" defaultValue={['1']}>
  633. <Checkbox
  634. value="1"
  635. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  636. style={{ width: 380 }}
  637. ></Checkbox>
  638. <Checkbox
  639. value="2"
  640. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  641. style={{ width: 380 }}
  642. ></Checkbox>
  643. <Checkbox
  644. value="3"
  645. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  646. style={{ width: 380 }}
  647. ></Checkbox>
  648. </CheckboxGroup>
  649. <br />
  650. <br />
  651. <hr />
  652. <div>下面是垂直的情况:</div>
  653. <div>常见情况</div>
  654. <CheckboxGroup direction="vertical" type="card" defaultValue={['1']}>
  655. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  656. 多选框标题
  657. </Checkbox>
  658. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  659. 多选框标题
  660. </Checkbox>
  661. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  662. 多选框标题
  663. </Checkbox>
  664. </CheckboxGroup>
  665. <br />
  666. <br />
  667. <div>没有设置宽度</div>
  668. <CheckboxGroup direction="vertical" type="card" defaultValue={['1']}>
  669. <Checkbox
  670. value="1"
  671. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  672. >
  673. 多选框标题
  674. </Checkbox>
  675. <Checkbox
  676. value="2"
  677. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  678. >
  679. 多选框标题
  680. </Checkbox>
  681. <Checkbox
  682. value="3"
  683. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  684. >
  685. 多选框标题
  686. </Checkbox>
  687. </CheckboxGroup>
  688. <br />
  689. <br />
  690. <div>设置了width=380</div>
  691. <CheckboxGroup direction="vertical" type="card" defaultValue={['1']}>
  692. <Checkbox
  693. value="1"
  694. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  695. style={{ width: 380 }}
  696. >
  697. 多选框标题
  698. </Checkbox>
  699. <Checkbox
  700. value="2"
  701. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  702. style={{ width: 380 }}
  703. >
  704. 多选框标题
  705. </Checkbox>
  706. <Checkbox
  707. value="3"
  708. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  709. style={{ width: 380 }}
  710. >
  711. 多选框标题
  712. </Checkbox>
  713. </CheckboxGroup>
  714. </>
  715. );
  716. export const CheckboxGroupPureCardStyle = () => (
  717. <>
  718. <div>常见情况</div>
  719. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  720. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  721. 多选框标题
  722. </Checkbox>
  723. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  724. 多选框标题
  725. </Checkbox>
  726. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  727. 多选框标题
  728. </Checkbox>
  729. </CheckboxGroup>
  730. <br />
  731. <br />
  732. <div>radio disabled</div>
  733. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  734. <Checkbox value="1" disabled extra="Semi Design" style={{ width: 280 }}>
  735. 多选框标题
  736. </Checkbox>
  737. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  738. 多选框标题
  739. </Checkbox>
  740. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  741. 多选框标题
  742. </Checkbox>
  743. </CheckboxGroup>
  744. <br />
  745. <br />
  746. <div>checkboxGroup disabled</div>
  747. <CheckboxGroup type="pureCard" disabled defaultValue={['1']}>
  748. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  749. 多选框标题
  750. </Checkbox>
  751. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  752. 多选框标题
  753. </Checkbox>
  754. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  755. 多选框标题
  756. </Checkbox>
  757. </CheckboxGroup>
  758. <br />
  759. <br />
  760. <div>文字很长,并且没有设置宽度,因此换行显示</div>
  761. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  762. <Checkbox
  763. value="1"
  764. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  765. >
  766. 多选框标题
  767. </Checkbox>
  768. <Checkbox
  769. value="2"
  770. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  771. >
  772. 多选框标题
  773. </Checkbox>
  774. <Checkbox
  775. value="3"
  776. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  777. >
  778. 多选框标题
  779. </Checkbox>
  780. </CheckboxGroup>
  781. <br />
  782. <br />
  783. <div>设置了width=180</div>
  784. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  785. <Checkbox
  786. value="1"
  787. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  788. style={{ width: 180 }}
  789. >
  790. 多选框标题
  791. </Checkbox>
  792. <Checkbox
  793. value="2"
  794. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  795. style={{ width: 180 }}
  796. >
  797. 多选框标题
  798. </Checkbox>
  799. <Checkbox
  800. value="3"
  801. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  802. style={{ width: 180 }}
  803. >
  804. 多选框标题
  805. </Checkbox>
  806. </CheckboxGroup>
  807. <br />
  808. <br />
  809. <div>没有extra,width=180</div>
  810. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  811. <Checkbox value="1" style={{ width: 180 }}>
  812. 多选框标题
  813. </Checkbox>
  814. <Checkbox value="2" style={{ width: 180 }}>
  815. 多选框标题
  816. </Checkbox>
  817. <Checkbox value="3" style={{ width: 180 }}>
  818. 多选框标题
  819. </Checkbox>
  820. </CheckboxGroup>
  821. <br />
  822. <br />
  823. <div>没有标题,width=380</div>
  824. <CheckboxGroup type="pureCard" defaultValue={['1']}>
  825. <Checkbox
  826. value="1"
  827. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  828. style={{ width: 380 }}
  829. ></Checkbox>
  830. <Checkbox
  831. value="2"
  832. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  833. style={{ width: 380 }}
  834. ></Checkbox>
  835. <Checkbox
  836. value="3"
  837. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  838. style={{ width: 380 }}
  839. ></Checkbox>
  840. </CheckboxGroup>
  841. <br />
  842. <br />
  843. <hr />
  844. <div>下面是垂直的情况:</div>
  845. <div>常见情况</div>
  846. <CheckboxGroup direction="vertical" type="pureCard" defaultValue={['1']}>
  847. <Checkbox value="1" extra="Semi Design" style={{ width: 280 }}>
  848. 多选框标题
  849. </Checkbox>
  850. <Checkbox value="2" extra="Semi Design" style={{ width: 280 }}>
  851. 多选框标题
  852. </Checkbox>
  853. <Checkbox value="3" extra="Semi Design" style={{ width: 280 }}>
  854. 多选框标题
  855. </Checkbox>
  856. </CheckboxGroup>
  857. <br />
  858. <br />
  859. <div>没有设置宽度</div>
  860. <CheckboxGroup direction="vertical" type="pureCard" defaultValue={['1']}>
  861. <Checkbox
  862. value="1"
  863. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  864. >
  865. 多选框标题
  866. </Checkbox>
  867. <Checkbox
  868. value="2"
  869. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  870. >
  871. 多选框标题
  872. </Checkbox>
  873. <Checkbox
  874. value="3"
  875. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  876. >
  877. 多选框标题
  878. </Checkbox>
  879. </CheckboxGroup>
  880. <br />
  881. <br />
  882. <div>设置了width=380</div>
  883. <CheckboxGroup direction="vertical" type="pureCard" defaultValue={['1']}>
  884. <Checkbox
  885. value="1"
  886. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  887. style={{ width: 380 }}
  888. >
  889. 多选框标题
  890. </Checkbox>
  891. <Checkbox
  892. value="2"
  893. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  894. style={{ width: 380 }}
  895. >
  896. 多选框标题
  897. </Checkbox>
  898. <Checkbox
  899. value="3"
  900. extra="Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统"
  901. style={{ width: 380 }}
  902. >
  903. 多选框标题
  904. </Checkbox>
  905. </CheckboxGroup>
  906. </>
  907. );
  908. export const CheckboxOnChangeEvent = () => (
  909. <div style={{marginLeft: 100}}>
  910. <div>查看 onChange 入参</div>
  911. <Checkbox onChange={e => console.log(e)}>
  912. Apple
  913. </Checkbox>
  914. <div style={{marginTop: 30}}>Popover 内套 Popover, 且 content 为 checkbox</div>
  915. <Popover
  916. trigger={'click'}
  917. onClickOutSide={e => console.log('onClickOutSide')}
  918. content={
  919. <Popover
  920. trigger='click'
  921. content={
  922. <Checkbox
  923. onChange={e => {
  924. console.log('checkbox onChange', e);
  925. e.stopPropagation();
  926. e.nativeEvent && e.nativeEvent.stopImmediatePropagation();
  927. }}
  928. >
  929. Semi Design
  930. </Checkbox>
  931. }
  932. >
  933. trigger
  934. </Popover>
  935. }
  936. >
  937. <Tag>点击此处</Tag>
  938. </Popover>
  939. <div style={{marginTop: 30}}>Popover 内套 Cascader 多选</div>
  940. <Popover
  941. trigger={'click'}
  942. content={
  943. <Cascader
  944. defaultValue={['zhejiang', 'ningbo', 'jiangbei']}
  945. style={{ width: 300 }}
  946. treeData={[
  947. {
  948. label: '浙江省',
  949. value: 'zhejiang',
  950. children: [
  951. {
  952. label: '杭州市',
  953. value: 'hangzhou',
  954. children: [
  955. {
  956. label: '西湖区',
  957. value: 'xihu',
  958. },
  959. ],
  960. },
  961. ],
  962. }
  963. ]}
  964. placeholder="请选择所在地区"
  965. multiple
  966. />
  967. }
  968. >
  969. <Tag>点击此处</Tag>
  970. </Popover>
  971. </div>
  972. );
  973. CheckboxOnChangeEvent.story = {
  974. name: 'checkbox onChange event',
  975. };