diff --git a/packages/components/src/core/Panel/__storybook__/constants.ts b/packages/components/src/core/Panel/__storybook__/constants.ts new file mode 100644 index 000000000..594509c77 --- /dev/null +++ b/packages/components/src/core/Panel/__storybook__/constants.ts @@ -0,0 +1,6 @@ +export const PANEL_EXCLUDED_CONTROLS = [ + "sdsType", + "position", + "width", + "disableScrollLock", +]; diff --git a/packages/components/src/core/Panel/__storybook__/index.stories.tsx b/packages/components/src/core/Panel/__storybook__/index.stories.tsx new file mode 100644 index 000000000..2365673b2 --- /dev/null +++ b/packages/components/src/core/Panel/__storybook__/index.stories.tsx @@ -0,0 +1,71 @@ +import { Args, Meta } from "@storybook/react"; +import { BADGE } from "@geometricpanda/storybook-addon-badges"; +import { Panel } from "./stories/default"; +import { PANEL_EXCLUDED_CONTROLS } from "./constants"; +import { TestDemo } from "./stories/test"; +import { CustomHeaderAndCloseButtonDemo } from "./stories/customCloseButton"; + +export default { + argTypes: { + position: { + control: { + type: "select", + }, + options: ["left", "right", "bottom"], + }, + sdsType: { + control: { + type: "select", + }, + options: ["basic", "overlay"], + }, + width: { + control: { + type: "text", + }, + }, + }, + component: Panel, + parameters: { + badges: [BADGE.BETA], + }, + title: "Components/Panel", +} as Meta; + +// Default + +export const Default = { + args: { + position: "left", + sdsType: "basic", + width: "320px", + }, +}; + +// With Custom Close Button and Header + +export const CustomHeaderAndCloseButton = { + parameters: { + controls: { + exclude: PANEL_EXCLUDED_CONTROLS, + }, + snapshot: { + skip: true, + }, + }, + render: (args: Args) => , +}; + +// Test + +export const Test = { + parameters: { + controls: { + exclude: PANEL_EXCLUDED_CONTROLS, + }, + snapshot: { + skip: true, + }, + }, + render: (args: Args) => , +}; diff --git a/packages/components/src/core/Panel/__storybook__/stories/customCloseButton.tsx b/packages/components/src/core/Panel/__storybook__/stories/customCloseButton.tsx new file mode 100644 index 000000000..9c1825371 --- /dev/null +++ b/packages/components/src/core/Panel/__storybook__/stories/customCloseButton.tsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Args } from "@storybook/react"; +import RawPanel from "src/core/Panel"; +import Button from "src/core/Button"; +import { Box, Typography } from "@mui/material"; +import { LONG_LOREM_IPSUM } from "src/common/storybook/loremIpsum"; + +export const CustomHeaderAndCloseButtonDemo = (props: Args): JSX.Element => { + const [open, setOpen] = React.useState(true); + + return ( + <> + + + +

{LONG_LOREM_IPSUM}

+

{LONG_LOREM_IPSUM}

+

{LONG_LOREM_IPSUM}

+

{LONG_LOREM_IPSUM}

+ + + ); +}; diff --git a/packages/components/src/core/Panel/__storybook__/stories/test.tsx b/packages/components/src/core/Panel/__storybook__/stories/test.tsx new file mode 100644 index 000000000..0fb63d5d7 --- /dev/null +++ b/packages/components/src/core/Panel/__storybook__/stories/test.tsx @@ -0,0 +1,10 @@ +import { Args } from "@storybook/react"; +import RawPanel from "src/core/Panel"; + +export const TestDemo = (props: Args): JSX.Element => { + return ( + + [Panel Content] + + ); +}; diff --git a/packages/components/src/core/Panel/__tests__/Panel.namespace-test.tsx b/packages/components/src/core/Panel/__tests__/Panel.namespace-test.tsx new file mode 100644 index 000000000..04d8206e0 --- /dev/null +++ b/packages/components/src/core/Panel/__tests__/Panel.namespace-test.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import { Panel, PanelProps } from "@czi-sds/components"; +import { noop } from "src/common/utils"; + +const PanelNameSpaceTest = (props: PanelProps) => { + return ( + Header

} + CloseButtonComponent={} + closeButtonOnClick={noop} + > + This is a Basic Panel! +
+ ); +}; diff --git a/packages/components/src/core/Panel/__tests__/__snapshots__/index.test.tsx.snap b/packages/components/src/core/Panel/__tests__/__snapshots__/index.test.tsx.snap new file mode 100644 index 000000000..07ef7858d --- /dev/null +++ b/packages/components/src/core/Panel/__tests__/__snapshots__/index.test.tsx.snap @@ -0,0 +1,20 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` Default story renders snapshot 1`] = ` +
+ +
+`; diff --git a/packages/components/src/core/Panel/__tests__/index.test.tsx b/packages/components/src/core/Panel/__tests__/index.test.tsx new file mode 100644 index 000000000..d9af24a79 --- /dev/null +++ b/packages/components/src/core/Panel/__tests__/index.test.tsx @@ -0,0 +1,124 @@ +import { generateSnapshots } from "@chanzuckerberg/story-utils"; +import { composeStories } from "@storybook/react"; +import { fireEvent, render, screen } from "@testing-library/react"; +import * as stories from "../__storybook__/index.stories"; +import Button from "src/core/Button"; + +// Returns a component that already contain all decorators from story level, meta level and global level. +const { Test } = composeStories(stories); + +const PAPER_ROOT_CLASS_NAME = "MuiPaper-root"; +const MUI_DRAWER_ANCHOR_LEFT_CLASS_NAME = "MuiDrawer-paperAnchorLeft"; +const MUI_DRAWER_ANCHOR_RIGHT_CLASS_NAME = "MuiDrawer-paperAnchorRight"; +const MUI_DRAWER_ANCHOR_BOTTOM_CLASS_NAME = "MuiDrawer-paperAnchorBottom"; + +describe("", () => { + generateSnapshots(stories); + + it("renders panel component", () => { + render(); + const panelElement = screen.getByTestId("panel"); + expect(panelElement).not.toBeNull(); + }); + + it("renders with overlay header and close button when sdsType is 'overlay'", () => { + render( + Header

} + CloseButtonComponent={ +