1- import { PureComponent , createElement } from 'react'
2- import { create as createJss , getDynamicStyles } from 'jss'
1+ import { create as createJss } from 'jss'
32import preset from 'jss-preset-default'
43
5- import filterProps from './utils/filterProps'
6- import composeClasses from './utils/composeClasses'
7- import generateTagName from './utils/generateTagName'
4+ import styled from './styled'
85import type {
96 BaseStylesType ,
107 ComponentStyleType ,
118 StyledType ,
129 StyledElementAttrsType ,
1310 StyledElementType ,
14- TagNameOrStyledElementType ,
15- StyledElementPropsType
11+ TagNameOrStyledElementType
1612} from './types'
1713
1814const jssDefault = createJss ( preset ( ) )
1915
20-
2116const createStyled = (
2217 jss ? : Function = jssDefault
2318) => (
2419 baseStyles : BaseStylesType = { }
2520) : StyledType => {
26- const sheets = { }
21+ let staticSheet
22+ let dynamicSheet
2723
2824 const mountSheets = ( ) => {
29- if ( ! sheets . staticSheet ) {
30- sheets . staticSheet = jss . createStyleSheet ( baseStyles , {
25+ if ( ! staticSheet ) {
26+ staticSheet = jss . createStyleSheet ( baseStyles , {
3127 meta : 'StaticBaseSheet' ,
3228 } ) . attach ( )
3329
34- sheets . dynamicSheet = jss . createStyleSheet ( { } , {
30+ dynamicSheet = jss . createStyleSheet ( { } , {
3531 link : true ,
3632 meta : 'DynamicComponentSheet' ,
3733 } ) . attach ( )
3834 }
35+
36+ return { staticSheet, dynamicSheet}
3937 }
4038
41- const styled = (
39+ return Object . assign ( (
4240 tagNameOrStyledElement : TagNameOrStyledElementType ,
4341 ownStyle : ComponentStyleType
4442 ) : StyledElementType => {
@@ -47,72 +45,9 @@ const createStyled = (
4745 : tagNameOrStyledElement
4846
4947 const elementStyle = { ...style , ...ownStyle }
50- const dynamicStyle = getDynamicStyles ( elementStyle )
51- const staticTagName = generateTagName ( tagName )
52-
53- return class StyledElement extends PureComponent {
54- static tagName : string = tagName
55- static style : ComponentStyleType = elementStyle
56-
57- props : StyledElementPropsType
58-
59- dynamicTagName = ''
60-
61- constructor ( props ) {
62- super ( props )
63- this . dynamicTagName = generateTagName ( tagName )
64- }
65-
66- componentWillMount ( ) {
67- mountSheets ( )
68-
69- if ( ! sheets . staticSheet . getRule ( staticTagName ) ) {
70- sheets . staticSheet . addRule ( staticTagName , elementStyle )
71- }
72-
73- if ( dynamicStyle && ! sheets . dynamicSheet . getRule ( this . dynamicTagName ) ) {
74- sheets . dynamicSheet
75- . detach ( )
76- . addRule ( this . dynamicTagName , dynamicStyle )
77- sheets . dynamicSheet
78- . update ( this . dynamicTagName , this . props )
79- . attach ( )
80- . link ( )
81- }
82- }
83-
84- componentWillReceiveProps ( nextProps : StyledElementPropsType ) {
85- if ( dynamicStyle ) {
86- sheets . dynamicSheet . update ( this . dynamicTagName , nextProps )
87- }
88- }
89-
90- componentWillUnmount ( ) {
91- sheets . dynamicSheet . deleteRule ( this . dynamicTagName )
92- }
93-
94- render ( ) {
95- if ( ! sheets . staticSheet ) return null
96-
97- const { children, className, ...attrs } = this . props
98-
99- const props = filterProps ( attrs )
100- const tagClass = composeClasses (
101- sheets . staticSheet . classes [ staticTagName ] ,
102- sheets . dynamicSheet . classes [ this . dynamicTagName ] ,
103- className
104- )
105-
106- return createElement ( tagName , { ...props , className : tagClass } , children )
107- }
108- }
109- }
11048
111- return Object . assign ( styled , {
112- sheets,
113- mountSheets,
114- styles : baseStyles
115- } )
49+ return styled ( { tagName, baseStyles, elementStyle, mountSheets} )
50+ } , { mountSheets, styles : baseStyles } )
11651}
11752
11853const defaultStyledCreator = createStyled ( )
0 commit comments