checkbox.stories.js 30 KB

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