From 156685ad775d16e95ffa8fab62c50bb022f2e8ae Mon Sep 17 00:00:00 2001 From: wuxh Date: Fri, 13 Jan 2023 13:55:02 +0800 Subject: [PATCH 1/2] docs: demos refactor function component --- docs/examples/custom-icon.tsx | 145 +++++++++------------ docs/examples/fragment.tsx | 4 +- docs/examples/simple.tsx | 230 ++++++++++++++++++---------------- src/index.tsx | 6 + 4 files changed, 191 insertions(+), 194 deletions(-) diff --git a/docs/examples/custom-icon.tsx b/docs/examples/custom-icon.tsx index d034716..b51f01b 100644 --- a/docs/examples/custom-icon.tsx +++ b/docs/examples/custom-icon.tsx @@ -3,6 +3,8 @@ import Collapse, { Panel } from 'rc-collapse'; import motion from './_util/motionUtil'; import '../../assets/index.less'; +const initLength = 3; + const text = ` A dog is a type of domesticated animal. Known for its loyalty and faithfulness, @@ -33,52 +35,42 @@ function expandIcon({ isActive }) { transform: `rotate(${isActive ? 90 : 0}deg)`, }} > - + ); } -class Test extends React.Component { - state = { - time: random(), - accordion: false, - activeKey: ['4'], - }; +const App: React.FC = () => { + const [, reRender] = React.useState({}); + const [accordion, setAccordion] = React.useState(false); + const [activeKey, setActiveKey] = React.useState(['4']); - onChange = (activeKey: string) => { - this.setState({ - activeKey, - }); - }; + const time = random(); - getItems() { - const items = []; - // eslint-disable-next-line no-plusplus - for (let i = 0, len = 3; i < len; i += 1) { - const key = i + 1; - items.push( - -

{text.repeat(this.state.time)}

-
, - ); - } - items.push( - + const panelItems = Array + .from( + { length: initLength }, + (_, i) => { + const key = i + 1; + return ( + +

{text.repeat(time)}

+
+ ) + }) + .concat( +

{text}

, - ); - - items.push( - +
@@ -87,61 +79,44 @@ class Test extends React.Component {
-
, +
); - return items; - } - - setActivityKey = () => { - this.setState({ - activeKey: ['2'], - }); - }; - toggle = () => { - const { accordion } = this.state; - this.setState({ - accordion: !accordion, - }); - }; + const tools = ( + <> + +
+
+ +
+
+ +
+
+ + ) - reRender = () => { - this.setState({ - time: random(), - }); - }; - - render() { - const { accordion, activeKey } = this.state; - const btn = accordion ? 'Mode: accordion' : 'Mode: collapse'; - return ( -
- - -
-
- -
-
- - {this.getItems()} - -
- ); - } + return ( + <> + {tools} + + {panelItems} + + + ) } -export default Test; +export default App; diff --git a/docs/examples/fragment.tsx b/docs/examples/fragment.tsx index 0b2c1f8..2d31f4c 100644 --- a/docs/examples/fragment.tsx +++ b/docs/examples/fragment.tsx @@ -3,7 +3,7 @@ import { Fragment } from 'react'; import Collapse, { Panel } from 'rc-collapse'; import '../../assets/index.less'; -const Test = () => ( +const App = () => ( content content @@ -20,4 +20,4 @@ const Test = () => ( ); -export default Test; +export default App; diff --git a/docs/examples/simple.tsx b/docs/examples/simple.tsx index 885fb85..e93043a 100644 --- a/docs/examples/simple.tsx +++ b/docs/examples/simple.tsx @@ -1,8 +1,11 @@ import * as React from 'react'; +import type { CollapsibleType } from 'rc-collapse'; import Collapse, { Panel } from 'rc-collapse'; import motion from './_util/motionUtil'; import '../../assets/index.less'; +const initLength = 3; + const text = ` A dog is a type of domesticated animal. Known for its loyalty and faithfulness, @@ -13,49 +16,79 @@ function random() { return parseInt((Math.random() * 10).toString(), 10) + 1; } -class Test extends React.Component { - state = { - time: random(), - accordion: false, - activeKey: ['4'], - collapsible: undefined, - }; +const arrowPath = + 'M869 487.8L491.2 159.9c-2.9-2.5-6.6-3.9-10.5-3.9h-88' + + '.5c-7.4 0-10.8 9.2-5.2 14l350.2 304H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.' + + '6 8 8 8h585.1L386.9 854c-5.6 4.9-2.2 14 5.2 14h91.5c1.9 0 3.8-0.7 5.' + + '2-2L869 536.2c14.7-12.8 14.7-35.6 0-48.4z'; - onChange = (activeKey: string) => { - this.setState({ - activeKey, - }); - }; +function expandIcon({ isActive }) { + return ( + + + + + + ); +} - getItems() { - const items = []; - // eslint-disable-next-line no-plusplus - for (let i = 0, len = 3; i < len; i++) { - const key = i + 1; - items.push( - -

{text.repeat(this.state.time)}

-
, - ); - } - items.push( - - - +const App: React.FC = () => { + const [, reRender] = React.useState({}); + const [accordion, setAccordion] = React.useState(false); + const [activeKey, setActiveKey] = React.useState(['4']); + const [collapsible, setCollapsible] = React.useState(); + + const time = random(); + + const panelItems = Array + .from( + { length: initLength }, + (_, i) => { + const key = i + 1; + return ( + +

{text.repeat(time)}

+
+ ) + }) + .concat( + + +

{text}

, - ); - - items.push( - + - +
@@ -63,82 +96,65 @@ class Test extends React.Component { , - ); - - items.push( - Extra Node}> + Extra Node} + >

Panel with extra

-
, +
); - return items; - } - - setActivityKey = () => { - this.setState({ - activeKey: ['2'], - }); - }; - - reRender = () => { - this.setState({ - time: random(), - }); - }; - - toggle = () => { - const { accordion } = this.state; - this.setState({ - accordion: !accordion, - }); - }; - - handleCollapsibleChange = (e: any) => { + const handleCollapsibleChange = (e: React.ChangeEvent) => { const values = [undefined, 'header', 'icon', 'disabled']; - this.setState({ - collapsible: values[e.target.value], - }); - }; + setCollapsible(values[e.target.value]) + } - render() { - const { accordion, activeKey, collapsible } = this.state; - const btn = accordion ? 'Mode: accordion' : 'Mode: collapse'; - return ( -
- - -

- collapsible: - -

-
-
- -
-
- - {this.getItems()} - + const tools = ( + <> + +
+
+ +
+
+
+ collapsible: +
- ); - } +
+ +
+
+ + ) + + return ( + <> + {tools} + + {panelItems} + + + ) } -export default Test; +export default App; diff --git a/src/index.tsx b/src/index.tsx index 6131506..3a2dfbf 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,10 @@ import Collapse from './Collapse'; +export type { + CollapsePanelProps, + CollapseProps, + CollapsibleType, +} from './interface'; + export default Collapse; export const { Panel } = Collapse; From 70e39a0c5250c6b36fdf4de1eed99b8f651e389f Mon Sep 17 00:00:00 2001 From: wuxh Date: Fri, 13 Jan 2023 14:26:43 +0800 Subject: [PATCH 2/2] chore: update TS type --- docs/examples/simple.tsx | 4 ++-- src/index.tsx | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/examples/simple.tsx b/docs/examples/simple.tsx index e93043a..3e7c341 100644 --- a/docs/examples/simple.tsx +++ b/docs/examples/simple.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import type { CollapsibleType } from 'rc-collapse'; +import type { CollapseProps } from 'rc-collapse'; import Collapse, { Panel } from 'rc-collapse'; import motion from './_util/motionUtil'; import '../../assets/index.less'; @@ -46,7 +46,7 @@ const App: React.FC = () => { const [, reRender] = React.useState({}); const [accordion, setAccordion] = React.useState(false); const [activeKey, setActiveKey] = React.useState(['4']); - const [collapsible, setCollapsible] = React.useState(); + const [collapsible, setCollapsible] = React.useState(); const time = random(); diff --git a/src/index.tsx b/src/index.tsx index 3a2dfbf..dcf24b0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,9 +1,8 @@ import Collapse from './Collapse'; -export type { - CollapsePanelProps, +export type { CollapseProps, - CollapsibleType, + CollapsePanelProps } from './interface'; export default Collapse;