1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

wrap all context providers

This commit is contained in:
checktheroads
2020-01-19 22:03:47 -07:00
parent c9a69d1e20
commit 6fbf6e6972
3 changed files with 93 additions and 33 deletions

View File

@@ -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 (
<HyperglassContext.Provider value={value}>
<ThemeProvider theme={theme}>
<ColorModeProvider>
<CSSReset />
<MediaProvider theme={theme}>{children}</MediaProvider>
</ColorModeProvider>
</ThemeProvider>
</HyperglassContext.Provider>
);
};
export default () => useContext(HyperglassContext);

View File

@@ -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 <MediaContext.Provider value={value}>{children}</MediaContext.Provider>;
};
export default () => useContext(MediaContext);

View File

@@ -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 ? <Layout /> : <PreConfig />;
// return (
// <ThemeProvider theme={theme}>
// <ColorModeProvider>
// <CSSReset />
// <MediaProvider theme={theme}>
// <ConfigProvider>
// <Component />
// </ConfigProvider>
// </MediaProvider>
// </ColorModeProvider>
// </ThemeProvider>
// );
// };
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 (
<ThemeProvider theme={data ? userTheme : defaultTheme}>
<ColorModeProvider>
<CSSReset />
{!data ? (
<PreConfig loading={loading} error={error} refresh={refetch} />
) : (
<Layout config={data} />
)}
</ColorModeProvider>
</ThemeProvider>
);
};
// Index.displayName = "Hyperglass";
const Index = () => <Layout />;
export default Index;