From 6fbf6e69727bf63937668abcb4a84f19ae666b9f Mon Sep 17 00:00:00 2001 From: checktheroads Date: Sun, 19 Jan 2020 22:03:47 -0700 Subject: [PATCH] wrap all context providers --- ui/components/HyperglassProvider.js | 31 +++++++++++++++ ui/components/MediaProvider.js | 34 ++++++++++++++++ ui/pages/index.js | 61 +++++++++++++---------------- 3 files changed, 93 insertions(+), 33 deletions(-) create mode 100644 ui/components/HyperglassProvider.js create mode 100644 ui/components/MediaProvider.js diff --git a/ui/components/HyperglassProvider.js b/ui/components/HyperglassProvider.js new file mode 100644 index 0000000..f9a1117 --- /dev/null +++ b/ui/components/HyperglassProvider.js @@ -0,0 +1,31 @@ +import React, { createContext, useContext, useMemo } from "react"; +import dynamic from "next/dynamic"; +import { CSSReset, ThemeProvider } from "@chakra-ui/core"; +import { MediaProvider } from "~/components/MediaProvider"; +import { makeTheme, defaultTheme } from "~/theme"; + +// Disable SSR for ColorModeProvider +const ColorModeProvider = dynamic( + () => import("@chakra-ui/core").then(mod => mod.ColorModeProvider), + { ssr: false } +); + +const HyperglassContext = createContext(null); + +export const HyperglassProvider = ({ config, children }) => { + const value = useMemo(() => config, [config]); + const userTheme = value && makeTheme(value.branding); + const theme = value ? userTheme : defaultTheme; + return ( + + + + + {children} + + + + ); +}; + +export default () => useContext(HyperglassContext); diff --git a/ui/components/MediaProvider.js b/ui/components/MediaProvider.js new file mode 100644 index 0000000..6dc0c51 --- /dev/null +++ b/ui/components/MediaProvider.js @@ -0,0 +1,34 @@ +import React, { createContext, useContext, useMemo } from "react"; +import { useMediaLayout } from "use-media"; + +const MediaContext = createContext(null); + +export const MediaProvider = ({ theme, children }) => { + const { sm, md, lg, xl } = theme.breakpoints; + const isSm = useMediaLayout({ maxWidth: md }); + const isMd = useMediaLayout({ minWidth: md, maxWidth: lg }); + const isLg = useMediaLayout({ minWidth: lg, maxWidth: xl }); + const isXl = useMediaLayout({ minWidth: xl }); + let mediaSize = false; + switch (true) { + case isSm: + mediaSize = "sm"; + break; + case isMd: + mediaSize = "md"; + break; + case isLg: + mediaSize = "lg"; + break; + case isXl: + mediaSize = "xl"; + break; + } + const value = useMemo( + () => ({ isSm: isSm, isMd: isMd, isLg: isLg, isXl: isXl, mediaSize: mediaSize }), + [isSm, isMd, isLg, isXl, mediaSize] + ); + return {children}; +}; + +export default () => useContext(MediaContext); diff --git a/ui/pages/index.js b/ui/pages/index.js index 5064cdd..fafd86a 100644 --- a/ui/pages/index.js +++ b/ui/pages/index.js @@ -1,39 +1,34 @@ import React from "react"; -import dynamic from "next/dynamic"; -import useAxios from "axios-hooks"; -import { CSSReset, ThemeProvider } from "@chakra-ui/core"; import Layout from "~/components/Layout"; -import PreConfig from "~/components/PreConfig"; -import { makeTheme, defaultTheme } from "~/theme"; -// Disable SSR for ColorModeProvider -const ColorModeProvider = dynamic( - () => import("@chakra-ui/core").then(mod => mod.ColorModeProvider), - { ssr: false } -); +// const Index = () => { +// // const [{ data, loading, error }, refetch] = useAxios({ +// // url: "/config", +// // method: "get" +// // }); +// // const data = undefined; +// // const loading = false; +// // const error = { message: "Shit broke" }; +// // const refetch = () => alert("refetched"); +// const userTheme = data && makeTheme(data.branding); +// const theme = data ? userTheme : defaultTheme; +// const Component = data ? : ; +// return ( +// +// +// +// +// +// +// +// +// +// +// ); +// }; -const Index = () => { - const [{ data, loading, error }, refetch] = useAxios({ - url: "/config", - method: "get" - }); - // const data = undefined; - // const loading = false; - // const error = { message: "Shit broke" }; - // const refetch = () => alert("refetched"); - const userTheme = data && makeTheme(data.branding); - return ( - - - - {!data ? ( - - ) : ( - - )} - - - ); -}; +// Index.displayName = "Hyperglass"; + +const Index = () => ; export default Index;