import React from "react";
import { useCallback, useMemo, useState } from "react";
import { createComponentTemplate } from "vibe-storybook-components";
import Toast from "../Toast";
import { createStoryMetaSettingsDecorator } from "../../../storybook";
import Button from "../../Button/Button";
import "./Toast.stories.scss";
const metaSettings = createStoryMetaSettingsDecorator({
component: Toast,
enumPropNamesArray: ["type"],
iconPropNamesArray: ["icon"]
});
export default {
title: "Feedback/Toast",
component: Toast,
argTypes: metaSettings.argTypes,
decorators: metaSettings.decorators
};
const toastTemplate = createComponentTemplate(Toast);
export const Overview = {
render: toastTemplate.bind({}),
name: "Overview",
args: {
children: "General message toast",
open: true,
className: "monday-storybook-toast_wrapper",
actions: [
{
type: Toast.actionTypes.BUTTON,
content: "Button"
}
]
},
parameters: { chromatic: { pauseAnimationAtEnd: false } }
};
export const DefaultWithButton = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Button"
}
],
[]
);
return (
General message toast
);
},
name: "Default with button",
parameters: { chromatic: { pauseAnimationAtEnd: false } }
};
export const ToastWithLink = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.LINK,
text: "Link to action",
href: "https://monday.com"
}
],
[]
);
return (
General message toast
);
},
name: "Toast with link"
};
export const ToastWithLoading = {
render: () => {
return (
General message toast
);
},
name: "Toast with loading",
parameters: { chromatic: { pauseAnimationAtEnd: true } }
};
export const SuccessMessage = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Undo 5"
}
],
[]
);
return (
Positive message toast
);
},
name: "Success message"
};
export const ErrorMessage = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Button"
}
],
[]
);
return (
Negative message toast
);
},
name: "Error message"
};
export const WarningMessage = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Button"
}
],
[]
);
return (
Warning message toast
);
},
name: "Warning message",
parameters: { chromatic: { pauseAnimationAtEnd: false } }
};
export const DarkMessage = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Button"
}
],
[]
);
return (
Dark message toast
);
},
name: "Dark message",
parameters: { chromatic: { pauseAnimationAtEnd: false } }
};
export const FeedbackLoop = {
render: () => {
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Undo"
}
],
[]
);
return (
We successfully deleted 1 item
);
},
parameters: { chromatic: { pauseAnimationAtEnd: false } }
};
export const Animation = {
render: () => {
const [successToastOpen, setSuccessToastOpen] = useState(false);
const [failureToastOpen, setFailureToastOpen] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
const onSuccessClick = useCallback(() => {
setSuccessToastOpen(true);
setIsDeleting(true);
setTimeout(() => {
setIsDeleting(false);
}, 1000);
}, []);
const onFailureClick = useCallback(() => {
setFailureToastOpen(true);
setIsDeleting(true);
setTimeout(() => {
setIsDeleting(false);
}, 1000);
}, []);
const actions = useMemo(
() => [
{
type: Toast.actionTypes.BUTTON,
content: "Undo"
}
],
[]
);
return (
<>
setSuccessToastOpen(false)}
autoHideDuration={2000}
loading={isDeleting}
>
{isDeleting ? "Deleting 1 selected item..." : "We successfully deleted 1 item"}
setFailureToastOpen(false)}
autoHideDuration={2000}
loading={isDeleting}
>
{isDeleting ? "Deleting 1 selected item..." : "Something went wrong"}
>
);
}
};