98 lines
2.0 KiB
TypeScript
98 lines
2.0 KiB
TypeScript
|
import type { Meta } from "@storybook/react";
|
||
|
import { useState } from "react";
|
||
|
import { Modal } from "../src/components/Modal/Modal";
|
||
|
import { fn } from "@storybook/test";
|
||
|
|
||
|
const meta = {
|
||
|
title: "Overlays/Modal",
|
||
|
component: Modal,
|
||
|
parameters: {
|
||
|
layout: "fullscreen",
|
||
|
inlineStories: false,
|
||
|
},
|
||
|
tags: ["autodocs"],
|
||
|
argTypes: {},
|
||
|
args: {
|
||
|
onAction: fn(),
|
||
|
onClose: fn(),
|
||
|
},
|
||
|
} satisfies Meta<typeof Modal>;
|
||
|
|
||
|
export default meta;
|
||
|
|
||
|
type Props = {
|
||
|
onAction: () => void;
|
||
|
onClose: () => void;
|
||
|
};
|
||
|
|
||
|
const Template = (props: Props) => {
|
||
|
const [open, setOpen] = useState(false);
|
||
|
|
||
|
const onOpen = () => setOpen(true);
|
||
|
|
||
|
const onClose = () => {
|
||
|
props.onClose();
|
||
|
setOpen(false);
|
||
|
};
|
||
|
|
||
|
return (
|
||
|
<div style={{ padding: "6rem" }}>
|
||
|
<button onClick={onOpen}>Make Modal</button>
|
||
|
<Modal onClose={onClose} open={open}>
|
||
|
<p>Hello world</p>
|
||
|
</Modal>
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export const Default = Template.bind({});
|
||
|
|
||
|
const ActionTemplate = (props: Props) => {
|
||
|
const [open, setOpen] = useState(false);
|
||
|
|
||
|
const onOpen = () => setOpen(true);
|
||
|
|
||
|
const onClose = () => {
|
||
|
props.onClose();
|
||
|
setOpen(false);
|
||
|
};
|
||
|
|
||
|
const onAction = () => {
|
||
|
props.onAction();
|
||
|
setOpen(false);
|
||
|
};
|
||
|
|
||
|
return (
|
||
|
<div style={{ padding: "6rem" }}>
|
||
|
<button onClick={onOpen}>Make Modal</button>
|
||
|
<Modal onClose={onClose} open={open} onAction={onAction}>
|
||
|
<p>Hello world</p>
|
||
|
</Modal>
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export const Action = ActionTemplate.bind({});
|
||
|
|
||
|
const NoButtonTemplate = (props: Props) => {
|
||
|
const [open, setOpen] = useState(false);
|
||
|
|
||
|
const onOpen = () => setOpen(true);
|
||
|
|
||
|
const onClose = () => {
|
||
|
props.onClose();
|
||
|
setOpen(false);
|
||
|
};
|
||
|
|
||
|
return (
|
||
|
<div style={{ padding: "6rem" }}>
|
||
|
<button onClick={onOpen}>Make Modal</button>
|
||
|
<Modal onClose={onClose} open={open} displayCloseButton={false}>
|
||
|
<p>Hello world</p>
|
||
|
</Modal>
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export const NoButton = NoButtonTemplate.bind({});
|