mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import { create } from 'jss'
|
|
import preset from 'jss-preset-default'
|
|
import { SheetsRegistry } from 'react-jss'
|
|
import createPalette from 'material-ui/styles/palette'
|
|
import createMuiTheme from 'material-ui/styles/theme'
|
|
import { purple, green } from 'material-ui/colors'
|
|
import createGenerateClassName from 'material-ui/styles/createGenerateClassName'
|
|
|
|
const theme = createMuiTheme({
|
|
palette: createPalette({
|
|
primary: purple,
|
|
accent: green
|
|
})
|
|
})
|
|
|
|
// Configure JSS
|
|
const jss = create(preset())
|
|
jss.options.createGenerateClassName = createGenerateClassName
|
|
|
|
function createContext () {
|
|
return {
|
|
jss,
|
|
theme,
|
|
// This is needed in order to deduplicate the injection of CSS in the page.
|
|
sheetsManager: new WeakMap(),
|
|
// This is needed in order to inject the critical CSS.
|
|
sheetsRegistry: new SheetsRegistry()
|
|
}
|
|
}
|
|
|
|
export function setContext () {
|
|
// Singleton hack as there is no way to pass variables from _document.js to pages yet.
|
|
global.__INIT_MATERIAL_UI__ = createContext()
|
|
}
|
|
|
|
export function getContext () {
|
|
// Make sure to create a new store for every server-side request so that data
|
|
// isn't shared between connections (which would be bad)
|
|
if (!process.browser) {
|
|
return global.__INIT_MATERIAL_UI__
|
|
}
|
|
|
|
// Reuse context on the client-side
|
|
if (!global.__INIT_MATERIAL_UI__) {
|
|
global.__INIT_MATERIAL_UI__ = createContext()
|
|
}
|
|
|
|
return global.__INIT_MATERIAL_UI__
|
|
}
|