@@ -14,6 +14,9 @@ import Option from "../../content-type-menu/option";
14
14
import OptionInterface from "../../content-type-menu/option.d" ;
15
15
import ContentTypeDroppedCreateEventParamsInterface from "../content-type-dropped-create-event-params" ;
16
16
import PreviewCollection from "../preview-collection" ;
17
+ import PreviewDataUpdateAfterParamsInterface from "../preview-data-update-after-params" ;
18
+ import ContentTypeAfterRenderEventParamsInterface from "../content-type-after-render-event-params" ;
19
+ import ContentTypeRemovedEventParamsInterface from "../content-type-removed-event-params" ;
17
20
18
21
/**
19
22
* @api
@@ -29,6 +32,28 @@ export default class Preview extends PreviewCollection {
29
32
this . addButton ( ) ;
30
33
}
31
34
} ) ;
35
+
36
+ events . on ( "previewData:updateAfter" , ( eventData : PreviewDataUpdateAfterParamsInterface ) => {
37
+ const contentTypePreview = eventData . preview ;
38
+ if ( ( contentTypePreview . config . name === "button-item"
39
+ && contentTypePreview . parent . parent . id === this . parent . id )
40
+ || ( contentTypePreview . config . name === "buttons"
41
+ && contentTypePreview . parent . id === this . parent . id ) ) {
42
+ this . resizeChildButtons ( ) ;
43
+ }
44
+ } ) ;
45
+
46
+ events . on ( "button-item:renderAfter" , ( eventData : ContentTypeAfterRenderEventParamsInterface ) => {
47
+ if ( eventData . contentType . parent . id === this . parent . id ) {
48
+ this . resizeChildButtons ( ) ;
49
+ }
50
+ } ) ;
51
+
52
+ events . on ( "button-item:removeAfter" , ( eventData : ContentTypeRemovedEventParamsInterface ) => {
53
+ if ( eventData . parent . id === this . parent . id ) {
54
+ this . resizeChildButtons ( ) ;
55
+ }
56
+ } ) ;
32
57
}
33
58
34
59
/**
@@ -84,4 +109,41 @@ export default class Preview extends PreviewCollection {
84
109
console . error ( error ) ;
85
110
} ) ;
86
111
}
112
+
113
+ /**
114
+ * Resize width of all child buttons. Dependently make them the same width if configured.
115
+ */
116
+ private resizeChildButtons ( ) {
117
+ if ( this . wrapperElement ) {
118
+ const buttonItems : JQuery = $ ( this . wrapperElement ) . find ( ".pagebuilder-button-item > a" ) ;
119
+ let buttonResizeValue : string | number = "" ;
120
+ if ( this . parent . dataStore . get ( "same_width" ) === "1" ) {
121
+ if ( buttonItems . length > 0 ) {
122
+ const currentLargestButton = this . findLargestButton ( buttonItems ) ;
123
+ buttonResizeValue = currentLargestButton . css ( "min-width" , "" ) . outerWidth ( ) ;
124
+ }
125
+ }
126
+
127
+ buttonItems . css ( "min-width" , buttonResizeValue ) ;
128
+ }
129
+ }
130
+
131
+ /**
132
+ * Find the largest button text value which will determine the button width we use for re-sizing.
133
+ *
134
+ * @param {JQuery } buttonItems
135
+ * @returns {JQuery }
136
+ */
137
+ private findLargestButton ( buttonItems : JQuery ) : JQuery {
138
+ let largestButton : JQuery | null = null ;
139
+ buttonItems . each ( ( index , element ) => {
140
+ const buttonElement = $ ( element ) ;
141
+ if ( largestButton === null
142
+ || buttonElement . find ( "span" ) . width ( ) > largestButton . find ( "span" ) . width ( ) ) {
143
+ largestButton = buttonElement ;
144
+ }
145
+ } ) ;
146
+
147
+ return largestButton ;
148
+ }
87
149
}
0 commit comments