diff --git a/.changeset/wicked-turkeys-travel.md b/.changeset/wicked-turkeys-travel.md new file mode 100644 index 00000000000..482171293e2 --- /dev/null +++ b/.changeset/wicked-turkeys-travel.md @@ -0,0 +1,6 @@ +--- +"@chakra-ui/media-query": patch +--- + +Fixed an issue where the `useBreakpointValue` hook did not work as expected with +custom breakpoints diff --git a/packages/media-query/src/use-breakpoint-value.ts b/packages/media-query/src/use-breakpoint-value.ts index 7b7f705afa4..809654726fe 100644 --- a/packages/media-query/src/use-breakpoint-value.ts +++ b/packages/media-query/src/use-breakpoint-value.ts @@ -27,9 +27,9 @@ export function useBreakpointValue( if (!breakpoint) return undefined /** - * Get the non-number breakpoint keys from the provided breakpoints + * Get the sorted breakpoint keys from the provided breakpoints */ - const breakpoints = Object.keys(theme.breakpoints) + const breakpoints = Array.from(theme.__breakpoints?.keys || []) const obj = isArray(values) ? fromEntries>>( diff --git a/packages/media-query/stories/media-query.stories.tsx b/packages/media-query/stories/media-query.stories.tsx index 9cc49d87817..33f5c89b8df 100644 --- a/packages/media-query/stories/media-query.stories.tsx +++ b/packages/media-query/stories/media-query.stories.tsx @@ -2,6 +2,7 @@ import { EnvironmentProvider } from "@chakra-ui/react-env" import { chakra } from "@chakra-ui/system" import * as React from "react" import Frame from "react-frame-component" +import { ChakraProvider, extendTheme } from "@chakra-ui/react" import { Hide, Show, useBreakpoint, useBreakpointValue } from "../src" export default { @@ -75,3 +76,27 @@ const BreakpointValue = () => { }) return

Breakpoint: {breakpoint}

} + +const NestedBreakpointValueWithCustomBreakpoint = () => { + const bp = useBreakpoint() + const isMobile = useBreakpointValue({ + base: true, + md: false, + }) + + return ( + <> +

Breakpoint: {bp}

+

isMobile: {String(isMobile)}

+ Expect isMobile to be true util "md" breakpoint is hit + + ) +} + +export const BreakpointValueWithCustomBreakpoint = () => ( + + + +) diff --git a/packages/skeleton/tests/skeleton.test.tsx b/packages/skeleton/tests/skeleton.test.tsx index 500b3174ecf..522594374ed 100644 --- a/packages/skeleton/tests/skeleton.test.tsx +++ b/packages/skeleton/tests/skeleton.test.tsx @@ -1,9 +1,11 @@ import * as React from "react" -import { ThemeProvider } from "@chakra-ui/system" import { render } from "@chakra-ui/test-utils" import MatchMediaMock from "jest-matchmedia-mock" +import { extendTheme, ChakraProvider } from "@chakra-ui/react" import { Skeleton, SkeletonText } from "../src" -import { queries, theme } from "./test-data" +import { queries, theme as testTheme } from "./test-data" + +const theme = extendTheme(testTheme) let matchMedia: any @@ -37,9 +39,9 @@ test("Change in parent state does not cause animation if already loaded", () => setState(true) }, []) return ( - + - + ) } @@ -53,5 +55,5 @@ test("Change in parent state does not cause animation if already loaded", () => function renderWithQuery(query: string, ui: React.ReactElement) { matchMedia.useMediaQuery(query) - return render({ui}) + return render({ui}) } diff --git a/packages/skeleton/tests/test-data.ts b/packages/skeleton/tests/test-data.ts index 75300243647..3ee5c274fff 100644 --- a/packages/skeleton/tests/test-data.ts +++ b/packages/skeleton/tests/test-data.ts @@ -6,6 +6,7 @@ export const breakpoints = createBreakpoints({ md: "200px", lg: "300px", xl: "400px", + "2xl": "600px", customBreakpoint: "500px", })