@@ -173,22 +173,63 @@ pub fn extract_style_from_expression<'a>(
173173 let mut props = vec ! [ ] ;
174174 for p in obj. properties . iter_mut ( ) {
175175 if let ObjectPropertyKind :: ObjectProperty ( o) = p {
176- let name = o. key . name ( ) . unwrap ( ) . to_string ( ) ;
176+ let key_name = o. key . name ( ) . unwrap ( ) . to_string ( ) ;
177+ let name = key_name. trim ( ) ;
178+ let mut part_of_selector = vec ! [ ] ;
179+
180+ let mut level = 0 ;
181+ let mut last_idx = 0 ;
182+ for ( idx, c) in name. chars ( ) . enumerate ( ) {
183+ if c == '(' {
184+ level += 1 ;
185+ }
186+ if c == ')' {
187+ level -= 1 ;
188+ }
189+ if c == ',' && level == 0 {
190+ part_of_selector. push ( & name[ last_idx..idx] ) ;
191+ last_idx = idx + 1 ;
192+ }
193+ if idx == name. len ( ) - 1 {
194+ part_of_selector. push ( & name[ last_idx..] ) ;
195+ }
196+ }
197+
198+ let sel = part_of_selector
199+ . iter ( )
200+ . map ( |name| {
201+ let name = name. trim ( ) ;
202+ if let Some ( selector) = selector {
203+ if name. starts_with ( "_theme" ) {
204+ StyleSelector :: from ( [
205+ name. replace ( "_theme" , "theme" ) . as_str ( ) ,
206+ & selector. to_string ( ) ,
207+ ] )
208+ . to_string ( )
209+ } else {
210+ if name. contains ( "&" ) {
211+ name. to_string ( ) . replace ( "&" , & selector. to_string ( ) )
212+ } else {
213+ StyleSelector :: from ( [
214+ selector. to_string ( ) . replace ( "_" , "" ) . as_str ( ) ,
215+ & name. replace ( "_" , "" ) ,
216+ ] )
217+ . to_string ( )
218+ }
219+ }
220+ } else {
221+ StyleSelector :: from ( name. replace ( "_" , "" ) . as_str ( ) ) . to_string ( )
222+ }
223+ } )
224+ . collect :: < Vec < _ > > ( )
225+ . join ( "," ) ;
177226 props. extend (
178227 extract_style_from_expression (
179228 ast_builder,
180229 None ,
181230 & mut o. value ,
182231 level,
183- & Some (
184- if let Some ( selector) = selector {
185- name. replace ( "&" , & selector. to_string ( ) )
186- } else {
187- name
188- }
189- . as_str ( )
190- . into ( ) ,
191- ) ,
232+ & Some ( StyleSelector :: Selector ( sel) ) ,
192233 )
193234 . styles ,
194235 ) ;
0 commit comments