Skip to content

Commit

Permalink
Add modal component, story, and theme, update Drawer onClose
Browse files Browse the repository at this point in the history
Update onClose in Modal and Drawer

Change name to toggleOpen

Include ModalBodyProps and export remaining sub components
  • Loading branch information
pratishta committed Aug 30, 2024
1 parent 8d9770d commit 852db6e
Show file tree
Hide file tree
Showing 7 changed files with 130 additions and 15 deletions.
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>
</>
);
},
};
38 changes: 38 additions & 0 deletions src/components/Modal/Modal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { Modal as ChakraModal } from "@chakra-ui/react";
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";
export const ModalCloseButton = ChakraModalCloseButton;
18 changes: 18 additions & 0 deletions src/components/Modal/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
export {
Modal,
ModalBody,
ModalFooter,
ModalHeader,
ModalOverlay,
ModalContent,
ModalCloseButton,
} from "./Modal";

export type {
ModalProps,
ModalBodyProps,
ModalFooterProps,
ModalHeaderProps,
ModalOverlayProps,
ModalContentProps,
} 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";

0 comments on commit 852db6e

Please sign in to comment.