import { storiesOf } from "@storybook/react"; import * as React from "react"; import { ConfirmButtonTransitionState } from "@saleor/components/ConfirmButton"; import SaveButtonBar from "@saleor/components/SaveButtonBar"; import Decorator from "../../Decorator"; const props = { disabled: false, onCancel: undefined, onDelete: undefined, onSave: undefined, state: "default" as ConfirmButtonTransitionState }; interface InteractiveDemoProps { targetState: "success" | "error" | "string"; } interface InteractiveDemoState { state: ConfirmButtonTransitionState; } class InteractiveDemo extends React.Component< InteractiveDemoProps, InteractiveDemoState > { state = { state: "default" as "default" }; timer = undefined; componentWillUnmount() { clearTimeout(this.timer); } handleButtonClick = () => { if ((this.state.state as string) !== "loading") { this.setState( { state: "loading" }, () => { this.timer = setTimeout(() => { this.setState({ state: this.props.targetState as "success" | "error" }); }, 3000); } ); } }; render() { return ( undefined} onSave={this.handleButtonClick} state={this.state.state} /> ); } } storiesOf("Generics / SaveButtonBar", module) .addDecorator(Decorator) .add("idle", () => ) .add("loading", () => ) .add("success", () => ) .add("error", () => ) .add("disabled", () => ) .add("interactive success", () => ) .add("interactive error", () => );