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"} ); } };