Skip to content

Commit 127c8b7

Browse files
author
Rasmus Eneman
committed
refactor: Make the buttons usable without react-toolbox
1 parent 54377b8 commit 127c8b7

File tree

4 files changed

+98
-81
lines changed

4 files changed

+98
-81
lines changed

src/buttons.tsx

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import * as React from 'react'
2+
import {DOMAttributes, ReactChild, ReactType, StatelessComponent} from 'react'
3+
import compose from 'recompose/compose'
4+
import setDisplayName from 'recompose/setDisplayName'
5+
import {withStepper} from './with-stepper'
6+
7+
export type AdvanceButtonProps = {
8+
component?: ReactType
9+
onFinish?: () => void
10+
onNext?: () => void
11+
finishLabel?: ReactChild
12+
}
13+
14+
export const AdvanceButton: StatelessComponent<DOMAttributes<HTMLButtonElement> & AdvanceButtonProps> = compose(
15+
withStepper,
16+
setDisplayName('AdvanceButton'),
17+
)(({
18+
component: Button = 'button',
19+
canReverse: _, pageState: __, setPageState: ___,
20+
pages, canAdvance, currentPage, setPageIndex,
21+
disabled, onClick, onNext, onFinish, finishLabel,
22+
children, ...props,
23+
}) => {
24+
const isLast = finishLabel && currentPage + 1 >= pages.length
25+
26+
return (
27+
<Button disabled={disabled || (!isLast && !canAdvance)} {...props} onClick={e => {
28+
if (currentPage + 1 >= pages.length) {
29+
if (onFinish) {
30+
onFinish()
31+
}
32+
} else {
33+
if (onNext) {
34+
onNext()
35+
}
36+
setPageIndex(currentPage + 1)
37+
}
38+
if (onClick) return onClick(e)
39+
}}>
40+
{finishLabel && currentPage + 1 >= pages.length
41+
? finishLabel
42+
: children
43+
}
44+
</Button>
45+
)
46+
})
47+
48+
export type ReverseButtonProps = {
49+
component?: ReactType
50+
onCancel?: () => void
51+
onPrevious?: () => void
52+
cancelLabel?: ReactChild
53+
}
54+
55+
export const ReverseButton: StatelessComponent<DOMAttributes<HTMLButtonElement> & ReverseButtonProps> = compose(
56+
withStepper,
57+
setDisplayName('ReverseButton'),
58+
)(({
59+
component: Button = 'button',
60+
canAdvance: _, pages: __, pageState: ___, setPageState: ____,
61+
canReverse, currentPage, setPageIndex,
62+
disabled, onClick, onPrevious, onCancel, cancelLabel,
63+
children, ...props,
64+
}) =>
65+
<Button disabled={disabled || (!cancelLabel && !canReverse)} {...props} onClick={e => {
66+
if (currentPage <= 0) {
67+
if (onCancel) {
68+
onCancel()
69+
}
70+
} else {
71+
if (onPrevious) {
72+
onPrevious()
73+
}
74+
setPageIndex(currentPage - 1)
75+
}
76+
if (onClick) return onClick(e)
77+
}}>
78+
{cancelLabel && currentPage <= 0
79+
? cancelLabel
80+
: children
81+
}
82+
</Button>
83+
)

src/dot-tracker.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const row = {
1212
}
1313

1414
export const DotTracker: StatelessComponent<{
15-
acttiveColor?: string
15+
activeColor?: string
1616
inactiveColor?: string
1717
style?: CSSProperties
1818
}> = compose(

src/index.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import {DotTracker} from './dot-tracker'
2-
import {StepTitle} from './step-title'
3-
import {Stepper} from './stepper'
4-
import {StepperView} from './stepper-view'
5-
import {TextTracker} from './text-tracker'
6-
import {withStepper} from './with-stepper'
7-
8-
export {DotTracker, StepTitle, Stepper, StepperView, TextTracker, withStepper}
1+
export {DotTracker} from './dot-tracker'
2+
export {StepTitle} from './step-title'
3+
export {Stepper} from './stepper'
4+
export {StepperView} from './stepper-view'
5+
export {TextTracker} from './text-tracker'
6+
export {withStepper} from './with-stepper'
7+
export * from './buttons'

src/react-toolbox/buttons.tsx

Lines changed: 7 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,11 @@
11
import * as React from 'react'
2-
import {ReactChild, StatelessComponent} from 'react'
2+
import {StatelessComponent} from 'react'
33
import {Button, ButtonProps} from 'react-toolbox/lib/button'
4-
import compose from 'recompose/compose'
5-
import setDisplayName from 'recompose/setDisplayName'
6-
import {withStepper} from '../with-stepper'
4+
import * as buttons from '../buttons'
5+
import {AdvanceButtonProps, ReverseButtonProps} from '../buttons'
76

8-
export const AdvanceButton: StatelessComponent<ButtonProps & {
9-
onFinish?: () => void
10-
onNext?: () => void
11-
finishLabel?: ReactChild
12-
}> = compose(
13-
withStepper,
14-
setDisplayName('AdvanceButton'),
15-
)(({
16-
canReverse: _, pageState: __, setPageState: ___,
17-
pages, canAdvance, currentPage, setPageIndex,
18-
disabled, onClick, onNext, onFinish, finishLabel,
19-
children, ...props,
20-
}) => {
21-
const isLast = finishLabel && currentPage + 1 >= pages.length
7+
export const AdvanceButton: StatelessComponent<ButtonProps & AdvanceButtonProps> = (props: any) =>
8+
<buttons.AdvanceButton component={Button} {...props} />
229

23-
return (
24-
<Button disabled={disabled || (!isLast && !canAdvance)} {...props} onClick={e => {
25-
if (currentPage + 1 >= pages.length) {
26-
if (onFinish) {
27-
onFinish()
28-
}
29-
} else {
30-
if (onNext) {
31-
onNext()
32-
}
33-
setPageIndex(currentPage + 1)
34-
}
35-
if (onClick) return onClick(e)
36-
}}>
37-
{finishLabel && currentPage + 1 >= pages.length
38-
? finishLabel
39-
: children
40-
}
41-
</Button>
42-
)
43-
})
44-
45-
export const ReverseButton: StatelessComponent<ButtonProps & {
46-
onCancel?: () => void
47-
onPrevious?: () => void
48-
cancelLabel?: ReactChild
49-
}> = compose(
50-
withStepper,
51-
setDisplayName('ReverseButton'),
52-
)(({
53-
canAdvance: _, pages: __, pageState: ___, setPageState: ____,
54-
canReverse, currentPage, setPageIndex,
55-
disabled, onClick, onPrevious, onCancel, cancelLabel,
56-
children, ...props,
57-
}) =>
58-
<Button disabled={disabled || (!cancelLabel && !canReverse)} {...props} onClick={e => {
59-
if (currentPage <= 0) {
60-
if (onCancel) {
61-
onCancel()
62-
}
63-
} else {
64-
if (onPrevious) {
65-
onPrevious()
66-
}
67-
setPageIndex(currentPage - 1)
68-
}
69-
if (onClick) return onClick(e)
70-
}}>
71-
{cancelLabel && currentPage <= 0
72-
? cancelLabel
73-
: children
74-
}
75-
</Button>
76-
)
10+
export const ReverseButton: StatelessComponent<ButtonProps & ReverseButtonProps> = (props: any) =>
11+
<buttons.ReverseButton component={Button} {...props} />

0 commit comments

Comments
 (0)