@@ -5,14 +5,38 @@ import {type ComponentStyleType} from '../types'
55const isObject = value =>
66 typeof value === 'object' && value !== null && ! Array . isArray ( value )
77
8- type separatedStyles = { dynamicStyle ?: ComponentStyleType , staticStyle ?: Object }
8+ const separateStyles = ( styles : Object ) : {
9+ dynamicStyle ? : ComponentStyleType ,
10+ staticStyle ?: ComponentStyleType
11+ } => {
12+ const result = { }
13+ const keys = Object . keys ( styles )
14+
15+ for ( let i = 0 ; i < keys . length ; i ++ ) {
16+ const key = keys [ i ]
17+ const value = styles [ key ]
18+ const itemStyles = Object . create ( null )
19+
20+ if ( typeof value === 'function' || isObservable ( value ) ) itemStyles . dynamicStyle = value
21+ else if ( isObject ( value ) ) Object . assign ( itemStyles , separateStyles ( value ) )
22+ else itemStyles . staticStyle = value
23+
24+ for ( const styleType in itemStyles ) {
25+ result [ styleType ] = result [ styleType ] || { }
26+ result [ styleType ] [ key ] = itemStyles [ styleType ]
27+ }
28+ }
29+
30+ return result
31+ }
932
1033/**
1134 * Extracts static and dynamic styles objects separately
1235 */
13- const getSeparatedStyles = ( ...initialStyles : ComponentStyleType [ ] ) : separatedStyles => {
14- const result = { }
15-
36+ const getSeparatedStyles = ( ...initialStyles : ComponentStyleType [ ] ) : {
37+ dynamicStyle ?: ComponentStyleType | ( props : Object ) => ?ComponentStyleType ,
38+ staticStyle ?: ComponentStyleType ,
39+ } => {
1640 const styles = { }
1741 const fns = [ ]
1842
@@ -27,34 +51,25 @@ const getSeparatedStyles = (...initialStyles: ComponentStyleType[]): separatedSt
2751 }
2852 }
2953
30- const keys = Object . keys ( styles )
31-
32- for ( let i = 0 ; i < keys . length ; i ++ ) {
33- const key = keys [ i ]
34- const value = styles [ key ]
35- const itemStyles = Object . create ( null )
36-
37- if ( typeof value === 'function' || isObservable ( value ) ) itemStyles . dynamicStyle = value
38- else if ( isObject ( value ) ) Object . assign ( itemStyles , getSeparatedStyles ( value ) )
39- else itemStyles . staticStyle = value
40-
41- for ( const styleType in itemStyles ) {
42- result [ styleType ] = result [ styleType ] || { }
43- result [ styleType ] [ key ] = itemStyles [ styleType ]
44- }
45- }
54+ const result = separateStyles ( styles )
4655
4756 if ( fns . length ) {
48- const { dynamicStyle} = result
57+ const { dynamicStyle = { } } = result
4958
5059 result . dynamicStyle = ( props ) => {
5160 const fnObjects = [ ]
61+ const dynamicResult = { }
5262
5363 for ( let i = 0 ; i < fns . length ; i ++ ) {
5464 fnObjects . push ( fns [ i ] ( props ) )
5565 }
5666
57- return Object . assign ( { } , dynamicStyle , ...fnObjects )
67+ const keys = Object . keys ( dynamicStyle )
68+ for ( let i = 0 ; i < keys . length ; i ++ ) {
69+ dynamicResult [ keys [ i ] ] = dynamicStyle [ keys [ i ] ] ( props )
70+ }
71+
72+ return Object . assign ( dynamicResult , ...fnObjects )
5873 }
5974 }
6075
0 commit comments