@@ -9,6 +9,7 @@ interface VariantFieldsEvent {
99 variant_data : {
1010 variant : string ;
1111 highlightVariantFields : boolean ;
12+ variantOrder : string [ ] ;
1213 } ;
1314 } ;
1415}
@@ -34,9 +35,26 @@ interface LocaleEvent {
3435 locale : string ;
3536 } ;
3637}
38+
39+ function isLowerOrderVariant ( variant_uid : string , dataCslp : string , variantOrder : string [ ] ) : boolean {
40+ const indexOfVariant = variantOrder . indexOf ( variant_uid ) ;
41+ let indexOfDataCslp = - 1 ;
42+ for ( let i = variantOrder . length - 1 ; i >= 0 ; i -- ) {
43+ if ( dataCslp . includes ( variantOrder [ i ] ) ) {
44+ indexOfDataCslp = i ;
45+ break ;
46+ }
47+ }
48+ if ( indexOfDataCslp < 0 ) {
49+ return false ;
50+ }
51+ return indexOfDataCslp < indexOfVariant ;
52+ }
53+
3754export function addVariantFieldClass (
3855 variant_uid : string ,
39- highlightVariantFields : boolean
56+ highlightVariantFields : boolean ,
57+ variantOrder : string [ ]
4058) : void {
4159 const elements = document . querySelectorAll ( `[data-cslp]` ) ;
4260 elements . forEach ( ( element ) => {
@@ -51,7 +69,11 @@ export function addVariantFieldClass(
5169 element . classList . add ( "visual-builder__variant-field" ) ;
5270 } else if ( ! dataCslp . startsWith ( "v2:" ) ) {
5371 element . classList . add ( "visual-builder__base-field" ) ;
54- } else {
72+ }
73+ else if ( isLowerOrderVariant ( variant_uid , dataCslp , variantOrder ) ) {
74+ element . classList . add ( "visual-builder__variant-field" ) ;
75+ }
76+ else {
5577 element . classList . add ( "visual-builder__disabled-variant-field" ) ;
5678 }
5779 } ) ;
@@ -125,7 +147,8 @@ export function useVariantFieldsPostMessageEvent(): void {
125147 removeVariantFieldClass ( ) ;
126148 addVariantFieldClass (
127149 event . data . variant_data . variant ,
128- event . data . variant_data . highlightVariantFields
150+ event . data . variant_data . highlightVariantFields ,
151+ event . data . variant_data . variantOrder
129152 ) ;
130153 }
131154 ) ;
0 commit comments