import React, { useState, Component, isValidElement, PureComponent, createRef } from 'react'; import ReactDOM from 'react-dom'; import { storiesOf } from '@storybook/react'; import { withKnobs, text, boolean } from '@storybook/addon-knobs'; import withPropsCombinations from 'react-storybook-addon-props-combinations'; import { Transition } from '../index'; import QueueTransition from './queue-transition'; import QueueStyledTransition from './queue-transition/styled'; import { Modal, Button, IconButton, Collapse, Nav, Switch, RadioGroup, Radio } from '@douyinfe/semi-ui'; const stories = storiesOf('semi-animation-react/Transition', module); stories.addDecorator(withKnobs); const itemStyle = { backgroundColor: 'rgb(241, 101, 101)', color: 'white', borderRadius: 4, padding: 10, textAlign: 'center', }; const bigSquareStyle = { backgroundColor: 'rgb(241, 101, 101)', width: 100, height: 100, margin: 20, marginLeft: 50, borderRadius: 4, fontSize: 16, color: 'white', display: 'flex', alignItems: 'center', justifyContent: 'center', }; stories.add('transition-bounceInOut', () => { class App extends PureComponent { constructor(props = {}) { super(props); this.state = { visible: true, }; this.ref = createRef(); } setVisible = visible => this.setState({ visible }); render() { const { visible } = this.state; return (
{visible ? ({ scale, opacity }) => { const node = this.ref.current; console.log('ref rect: ', node && node.getBoundingClientRect()); return (
bounceInOut
); } : null}
); } } class ModalDemo extends React.Component { constructor() { super(); this.state = { visible: false, visibleWithAnimation: false }; this.showDialog = this.showDialog.bind(this); this.handleOk = this.handleOk.bind(this); this.handleCancel = this.handleCancel.bind(this); } showDialog() { this.setState({ visible: true, visibleWithAnimation: true, }); } handleOk(e) { this.setState({ // visible: false, visibleWithAnimation: false, }); } handleCancel(e) { this.setState({ // visible: false, visibleWithAnimation: false, }); } render() { const { visibleWithAnimation, visible } = this.state; return ( <> this.setState({ visible: false })} > {visibleWithAnimation ? ({ opacity, scale }) => (

This is a modal with customized styles.

More content...

) : null}
); } } return ( <> ); }); stories.add('transition-bounceInOut-受控', () => { class App extends PureComponent { constructor(props = {}) { super(props); this.state = { state: 'enter', visible: true, }; this.ref = createRef(); } setVisible = visible => this.setState({ state: visible ? 'enter' : 'leave' }); didEnter = () => { this.setState({ visible: true }); }; didLeave = () => { this.setState({ visible: false }); }; render() { const { visible, state } = this.state; return (
{state === 'enter' || visible ? ({ scale, opacity }) => { const node = this.ref.current; // console.log('ref rect: ', node && node.getBoundingClientRect()); return (
bounceInOut
); } : null}
); } } return ( <> ); }); stories.add('transition-slideInOutDown', () => { const SlideInOutDown = function SlideInOutDown(props = {}) { return ( {props.children} ); }; class App extends PureComponent { state = { itemKey: '', }; setItemKey = itemKey => this.setState({ itemKey }); render() { const { itemKey } = this.state; return ( {['1', '2', '3'].map(key => ( {/* */} {itemKey === key ? ({ maxHeight }) => (

Hi, bytedance dance dance. This is the docsite of Semi UI.{' '}

) : null} {/*
*/}
))}
); } } return ; }); stories.add('transition-slideInOutLeft', () => { function SlideInOutLeft(props = {}) { return ( {props.children} ); } class NavApp extends React.Component { constructor() { super(); this.state = { isCollapsed: true, defaultOpenKeys: ['2', '2-3'], mode: 'vertical', navHeight: 480, selectedKeys: [], openKeys: ['2'], }; this.onSelect = (data = {}) => { console.log('trigger onSelect: ', data); let selectedKeys = Array.from(data.selectedKeys); this.setState({ selectedKeys }); }; this.onOpenChange = (data = {}) => { console.log('trigger onOpenChange: ', data); let openKeys = Array.from(data.openKeys); this.setState({ openKeys }); }; } updateCollapsed(isCollapsed) { this.setState({ isCollapsed }); } toggleMode() { let { mode, navHeight } = this.state; if (mode === 'vertical') { mode = 'horizontal'; navHeight = 60; } else { mode = 'vertical'; navHeight = 480; } this.setState({ mode, navHeight }); } renderNavWithTransform = ({ transform, translateX }) => { let { isCollapsed, defaultOpenKeys, mode, navHeight, selectedKeys, openKeys } = this.state; let testIcon = '//lf1-cdn-tos.bytescm.com/obj/mosaic-legacy/da9d0015af0f09667998'; let vigoIcon = '//lf1-cdn-tos.bytescm.com/obj/mosaic-legacy/504100070cbe0498d66f'; let icon3 = '//lf1-cdn-tos.bytescm.com/eesz/resource/bear/public/doc-favicon-v4.902ddd709d8aaa55df8d.ico'; return ( ); }; render() { let { isCollapsed, defaultOpenKeys, mode, navHeight, selectedKeys, openKeys } = this.state; let testIcon = '//lf1-cdn-tos.bytescm.com/obj/mosaic-legacy/da9d0015af0f09667998'; let vigoIcon = '//lf1-cdn-tos.bytescm.com/obj/mosaic-legacy/504100070cbe0498d66f'; let icon3 = '//lf1-cdn-tos.bytescm.com/eesz/resource/bear/public/doc-favicon-v4.902ddd709d8aaa55df8d.ico'; return (
{isCollapsed ? ({ transform, translateX }) => ( ) : null} this.updateCollapsed(!isCollapsed)} />
); } } return ; }); stories.add('queue transition', () => { const Demo = () => { const animStyle = { ...itemStyle, width: 100, marginBottom: 10 }; const [state, setState] = useState('enter'); const [position, setPosition] = useState('left'); const onSwitchPosition = e => { setPosition(e.target.value); }; const positionList = ['left', 'top', 'right', 'bottom']; return (
1
2
3
4

方向

{positionList.map(pos => ( {pos} ))}
); }; return ; }); stories.add('queue styled transition', () => { const Demo = () => { const animStyle = { backgroundColor: 'rgb(241, 101, 101)', color: 'white', borderRadius: 4, padding: 10, textAlign: 'center', width: 100, marginBottom: 10, }; const [state, setState] = useState('enter'); const [position, setPosition] = useState('Left'); const switchState = state => { setState(undefined); setTimeout(() => setState(state)); }; const onSwitchPosition = e => { setPosition(e.target.value); }; const positionList = ['Left', 'Up', 'Right', 'Down']; return (
1
2
3
4
{positionList.map(pos => ( {pos} ))}
); }; return ; });