@@ -14,29 +14,30 @@ import type {
1414type StyledArgs = {
1515 tagName : string ,
1616 elementStyle : ComponentStyleType ,
17- mountSheet : Function
17+ mountSheet : Function ,
18+ jss : Function
1819}
1920
20- const styled = ( { tagName, elementStyle, mountSheet} : StyledArgs ) => {
21+ const styled = ( { tagName, elementStyle, mountSheet, jss } : StyledArgs ) => {
2122 const { dynamicStyle, staticStyle} = getSeparatedStyles ( elementStyle )
2223 const staticTagName = staticStyle && generateTagName ( tagName )
2324
2425 const availableDynamicTagNames = [ ]
2526 const classMap = { }
2627
27- return class StyledElement extends Component < StyledElementPropsType > {
28+ let staticClassName
29+
30+ class StyledElement extends Component < StyledElementPropsType > {
2831 static tagName : string = tagName
2932 static style : ComponentStyleType = elementStyle
3033
31- dynamicTagName = ''
32-
33- sheet : JssSheet
34-
3534 constructor ( props : StyledElementPropsType ) {
3635 super ( props )
3736 if ( ! this . dynamicTagName && dynamicStyle ) {
3837 this . dynamicTagName = availableDynamicTagNames . pop ( ) || generateTagName ( tagName )
3938 }
39+
40+ this . staticClassName = staticClassName
4041 }
4142
4243 componentWillMount ( ) {
@@ -66,6 +67,10 @@ const styled = ({tagName, elementStyle, mountSheet}: StyledArgs) => {
6667 availableDynamicTagNames . push ( this . dynamicTagName )
6768 }
6869
70+ dynamicTagName = ''
71+ sheet: JssSheet
72+ staticClassName = ''
73+
6974 updateSheet ( props : StyledElementPropsType ) {
7075 let rule
7176 let ruleIndex = 0
@@ -83,6 +88,7 @@ const styled = ({tagName, elementStyle, mountSheet}: StyledArgs) => {
8388
8489 const props = filterProps ( tagName , attrs )
8590 const tagClass = composeClasses ( [
91+ this . staticClassName ,
8692 staticTagName && this . sheet . classes [ staticTagName ] ,
8793 this . dynamicTagName && this . sheet . classes [ this . dynamicTagName ] ,
8894 className
@@ -91,6 +97,22 @@ const styled = ({tagName, elementStyle, mountSheet}: StyledArgs) => {
9197 return createElement ( tagName , { ...props , className : tagClass } , children )
9298 }
9399 }
100+
101+ // $FlowIgnore
102+ StyledElement . valueOf = ( ) => {
103+ if ( ! staticClassName ) {
104+ staticClassName = `.${ jss . generateClassName ( {
105+ key : generateTagName ( 'static' )
106+ } ) } `
107+ }
108+
109+ return staticClassName
110+ }
111+
112+ // $FlowIgnore
113+ StyledElement . toString = StyledElement . valueOf
114+
115+ return StyledElement
94116}
95117
96118export default styled
0 commit comments