codex-marketplace-ui-compon.../stories/Dropdown.stories.tsx

91 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

2024-08-20 13:57:58 +00:00
import type { Meta, StoryObj } from "@storybook/react";
import { Dropdown, DropdownOption } from "../src/components/Dropdown/Dropdown";
import { PdfIcon } from "../src/components/WebFileIcon/PdfIcon";
import { ImageIcon } from "../src/components/WebFileIcon/ImageIcon";
import { ChangeEvent, useState } from "react";
import { fn } from "@storybook/test";
2024-08-20 13:57:58 +00:00
const meta = {
title: "Forms/Dropdown",
component: Dropdown,
parameters: {
layout: "centered",
},
tags: ["autodocs"],
argTypes: {},
args: {
onChange: fn(),
onSelected: fn(),
onFocus: fn(),
onBlur: fn(),
onMouseEnter: fn(),
onMouseLeave: fn(),
},
2024-08-20 13:57:58 +00:00
} satisfies Meta<typeof Dropdown>;
export default meta;
type Story = StoryObj<typeof meta>;
type Props = {
onChange: (e: ChangeEvent<HTMLInputElement>) => void;
onSelected?: (o: DropdownOption) => void;
onClick?: () => void;
onMouseEnter?: () => void;
onBlur?: () => void;
};
const Template = (p: Props) => {
2024-08-20 13:57:58 +00:00
const [value, setValue] = useState<string>("");
2024-08-28 08:03:26 +00:00
const onChange = (e: ChangeEvent<HTMLInputElement>) => {
p.onChange(e);
2024-08-20 13:57:58 +00:00
setValue(e.currentTarget.value);
};
2024-08-20 13:57:58 +00:00
const onSelected = (o: DropdownOption) => {
setValue(o.title);
p.onSelected?.(o);
};
2024-08-20 13:57:58 +00:00
return (
<Dropdown
{...p}
2024-08-20 13:57:58 +00:00
placeholder="Select your file"
onChange={onChange}
onSelected={onSelected}
value={value}
2024-08-28 08:03:26 +00:00
id={"dropdown"}
label={"Dropdown"}
2024-08-20 13:57:58 +00:00
options={[
{
title: "File1.pdf",
Icon: PdfIcon,
subtitle: "cid1",
},
{
title: "File2.jpg",
Icon: ImageIcon,
subtitle: "cid2",
},
]}
/>
);
};
export const Default = Template;
2024-08-20 13:57:58 +00:00
export const CustomStyle: Story = {
args: {
placeholder: "Select your file",
options: [],
style: { "--codex-input-border": "1px solid red" },
value: "",
2024-08-28 08:03:26 +00:00
id: "dropdown",
label: "Dropdown",
2024-08-20 13:57:58 +00:00
},
};