({
state = SaveButton.States.WAITING,
onClick,
waitingText = 'Save changes',
savingText = 'Saving\u2026',
failedText = 'Save failed',
succeededText = 'Saved!',
disabled = false,
...buttonProps
})
| 12 | import styles from 'components/SaveButton/SaveButton.scss'; |
| 13 | |
| 14 | const SaveButton = ({ |
| 15 | state = SaveButton.States.WAITING, |
| 16 | onClick, |
| 17 | waitingText = 'Save changes', |
| 18 | savingText = 'Saving\u2026', |
| 19 | failedText = 'Save failed', |
| 20 | succeededText = 'Saved!', |
| 21 | disabled = false, |
| 22 | ...buttonProps |
| 23 | }) => { |
| 24 | let value = ''; |
| 25 | let color = 'blue'; |
| 26 | switch (state) { |
| 27 | case SaveButton.States.WAITING: |
| 28 | value = waitingText; |
| 29 | break; |
| 30 | case SaveButton.States.SAVING: |
| 31 | value = savingText; |
| 32 | break; |
| 33 | case SaveButton.States.SUCCEEDED: |
| 34 | value = succeededText; |
| 35 | color = 'green'; |
| 36 | break; |
| 37 | case SaveButton.States.FAILED: |
| 38 | value = failedText; |
| 39 | color = 'red'; |
| 40 | break; |
| 41 | } |
| 42 | const className = state === SaveButton.States.FAILED ? styles.shake : null; |
| 43 | return ( |
| 44 | <span className={className}> |
| 45 | <Button |
| 46 | primary={true} |
| 47 | width={'128px'} |
| 48 | progress={state === SaveButton.States.SAVING} |
| 49 | color={color} |
| 50 | onClick={state === SaveButton.States.WAITING ? onClick : null} |
| 51 | value={value} |
| 52 | disabled={state === SaveButton.States.WAITING ? disabled : false} |
| 53 | {...buttonProps} |
| 54 | /> |
| 55 | </span> |
| 56 | ); |
| 57 | }; |
| 58 | |
| 59 | SaveButton.States = keyMirror(['SAVING', 'SUCCEEDED', 'FAILED']); |
| 60 |
nothing calls this directly
no outgoing calls
no test coverage detected