//
// Copyright 2022 DXOS.org
//
import { type Meta, type StoryObj } from '@storybook/react-vite';
import React, { type ReactNode, useState } from 'react';
import { withTheme } from '../../testing';
import { Button } from '../Button';
import { Toast } from './Toast';
type ActionTriggerProps = { altText: string; trigger: ReactNode };
type StorybookToastProps = Partial<{
icon: string;
title: string;
description: string;
duration: number;
actionTriggers: ActionTriggerProps[];
openTrigger: string;
defaultOpen: boolean;
}>;
const DefaultStory = ({
icon,
title,
description,
duration,
actionTriggers,
openTrigger,
defaultOpen = true,
}: StorybookToastProps) => {
const [open, setOpen] = useState(defaultOpen);
return (
setOpen(false)}>
{title}
{description}
{actionTriggers && actionTriggers.length > 0 && (
{actionTriggers.map(({ altText, trigger }: ActionTriggerProps, index: number) => (
{trigger}
))}
)}
);
};
const meta = {
title: 'ui/react-ui-core/components/Toast',
component: Toast as any,
render: DefaultStory,
decorators: [withTheme()],
} satisfies Meta;
export default meta;
type Story = StoryObj;
export const Default: Story = {
args: {
defaultOpen: true,
openTrigger: 'Open toast',
icon: 'ph--sparkle--regular',
title: 'This is a toast',
description: 'This goes away on its own with a timer.',
duration: 100_000,
},
};
export const WithAction: Story = {
args: {
defaultOpen: true,
openTrigger: 'Open toast',
icon: 'ph--sparkle--regular',
title: 'This is a toast',
description: 'This goes away on its own with a timer.',
duration: 100_000,
actionTriggers: [
{
altText: 'Press F5 to reload the page',
trigger: ,
},
],
},
};