Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add modal component, story, and theme #74

Merged
merged 1 commit into from
Sep 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 6 additions & 15 deletions src/components/Drawer/Drawer.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,31 +30,22 @@ export const Base: Story = {
args: {
placement: "bottom",
isOpen: false,
onClose: () => {
return;
},
onClose: () => {},
children: "Content here",
},
render: function Render(args) {
const [{ onClose }, updateArgs] = useArgs();
function onClick() {
updateArgs({ isOpen: true });
const [{ isOpen }, updateArgs] = useArgs();
function onClose() {
updateArgs({ isOpen: !isOpen });
}
const btnRef = useRef(null);

return (
<>
<Button ref={btnRef} onClick={onClick}>
<Button ref={btnRef} onClick={onClose}>
Open
</Button>
<Drawer
{...args}
onClose={() => {
onClose();
updateArgs({ isOpen: false });
}}
finalFocusRef={btnRef}
>
<Drawer {...args} onClose={onClose} finalFocusRef={btnRef}>
<DrawerOverlay />
<DrawerContent>
<DrawerCloseButton />
Expand Down
64 changes: 64 additions & 0 deletions src/components/Modal/Modal.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { Meta, StoryObj } from "@storybook/react";
import {
Modal,
ModalBody,
ModalFooter,
ModalHeader,
ModalOverlay,
ModalContent,
ModalCloseButton,
} from "./Modal";
import { getThemingArgTypes } from "@chakra-ui/storybook-addon";
import { theme } from "../../theme";
import { useArgs } from "@storybook/preview-api";
import { useRef } from "react";
import { Button } from "../Button";

const meta = {
title: "Components/Modal",
component: Modal,
tags: ["autodocs"],
argTypes: {
...getThemingArgTypes(theme, "Modal"),
},
} satisfies Meta<typeof Modal>;

export default meta;
type Story = StoryObj<typeof meta>;

export const Base: Story = {
args: {
isOpen: false,
children: "Lorem ipsum odor amet, consectetuer adipiscing elit.",
isCentered: true,
},
render: function Render(args) {
const [{ isOpen }, updateArgs] = useArgs();
function toggleOpen() {
updateArgs({ isOpen: !isOpen });
}
const btnRef = useRef(null);

return (
<>
<Button ref={btnRef} onClick={toggleOpen}>
Open
</Button>
<Modal {...args} onClose={toggleOpen} finalFocusRef={btnRef}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Modal Title</ModalHeader>
<ModalCloseButton />
<ModalBody>{args.children}</ModalBody>
<ModalFooter>
<Button variant="primary" onClick={toggleOpen}>
Close
</Button>
<Button variant="secondary">Secondary action</Button>
</ModalFooter>
</ModalContent>
</Modal>
</>
);
},
};
41 changes: 41 additions & 0 deletions src/components/Modal/Modal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { Modal as ChakraModal } from "@chakra-ui/react";
TangoYankee marked this conversation as resolved.
Show resolved Hide resolved
import type { ModalProps as ChakraModalProps } from "@chakra-ui/react";

export const Modal = ChakraModal;
export interface ModalProps extends ChakraModalProps {}

import { ModalBody as ChakraModalBody } from "@chakra-ui/react";
import { ModalBodyProps as ChakraModalBodyProps } from "@chakra-ui/react";

export const ModalBody = ChakraModalBody;
export interface ModalBodyProps extends ChakraModalBodyProps {}

import { ModalFooter as ChakraModalFooter } from "@chakra-ui/react";
import { ModalFooterProps as ChakraModalFooterProps } from "@chakra-ui/react";

export const ModalFooter = ChakraModalFooter;
export interface ModalFooterProps extends ChakraModalFooterProps {}

import { ModalHeader as ChakraModalHeader } from "@chakra-ui/react";
import { ModalHeaderProps as ChakraModalHeaderProps } from "@chakra-ui/react";

export const ModalHeader = ChakraModalHeader;
export interface ModalHeaderProps extends ChakraModalHeaderProps {}

import { ModalOverlay as ChakraModalOverlay } from "@chakra-ui/react";
import { ModalOverlayProps as ChakraModalOverlayProps } from "@chakra-ui/react";

export const ModalOverlay = ChakraModalOverlay;
export interface ModalOverlayProps extends ChakraModalOverlayProps {}

import { ModalContent as ChakraModalContent } from "@chakra-ui/react";
import { ModalContentProps as ChakraModalContentProps } from "@chakra-ui/react";

export const ModalContent = ChakraModalContent;
export interface ModalContentProps extends ChakraModalContentProps {}

import { ModalCloseButton as ChakraModalCloseButton } from "@chakra-ui/react";
TangoYankee marked this conversation as resolved.
Show resolved Hide resolved
import { ModalCloseButtonProps as ChakraModalCloseButtonProps } from "@chakra-ui/react";

export const ModalCloseButton = ChakraModalCloseButton;
export interface ModalCloseButtonProps extends ChakraModalCloseButtonProps {}
19 changes: 19 additions & 0 deletions src/components/Modal/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export {
Modal,
ModalBody,
ModalFooter,
ModalHeader,
ModalOverlay,
ModalContent,
ModalCloseButton,
} from "./Modal";

export type {
ModalProps,
ModalBodyProps,
ModalFooterProps,
ModalHeaderProps,
ModalOverlayProps,
ModalContentProps,
ModalCloseButtonProps,
} from "./Modal";
1 change: 1 addition & 0 deletions src/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ export * from "./Select";
export * from "./Drawer";
export * from "./Table";
export * from "./Transitions";
export * from "./Modal";
2 changes: 2 additions & 0 deletions src/theme/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { selectTheme } from "./select";
import { closeButtonTheme } from "./close-button";
import { drawerTheme } from "./drawer";
import { tableTheme } from "./table";
import { modalTheme } from "./modal";

export const components = {
Accordion: accordionTheme,
Expand All @@ -24,4 +25,5 @@ export const components = {
CloseButton: closeButtonTheme,
Drawer: drawerTheme,
Table: tableTheme,
Modal: modalTheme,
};
1 change: 1 addition & 0 deletions src/theme/components/modal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { modalTheme } from "@chakra-ui/theme/components/modal";
Loading