@@ -123,6 +123,8 @@ const ChatMark = ({ children, value, messageDone, submit = 'Submit', cancel = 'C
123123 widget [ "value" ] = event . currentTarget . value ;
124124 widgetsHandlers . setItem ( index , widget ) ;
125125 } ;
126+ const allChecked = widgets . every ( ( w ) => w . type === "checkbox" ? w . value === "checked" : true ) ;
127+ const indeterminate = widgets . some ( ( w ) => w . type === "checkbox" ? w . value === "checked" : false ) && ! allChecked ;
126128
127129 useEffect ( ( ) => {
128130 const lines = children . split ( "\n" ) ;
@@ -219,6 +221,7 @@ const ChatMark = ({ children, value, messageDone, submit = 'Submit', cancel = 'C
219221 let radioGroupTemp : any = [ ] ;
220222 let radioValuesTemp : any = [ ] ;
221223 let wdigetsTemp : any = [ ] ;
224+ let isFirstCheckbox = true ;
222225 widgets . map ( ( widget , index ) => {
223226 if ( widget . type === "text" ) {
224227 wdigetsTemp . push ( < Text key = { index } > { widget . value } </ Text > ) ;
@@ -238,6 +241,23 @@ const ChatMark = ({ children, value, messageDone, submit = 'Submit', cancel = 'C
238241 </ Button >
239242 ) ;
240243 } else if ( widget . type === "checkbox" ) {
244+ if ( isFirstCheckbox ) {
245+ wdigetsTemp . push ( < Checkbox
246+ classNames = { { root : classes . checkbox , label : classes . label } }
247+ disabled = { disabled }
248+ key = { "widget-all-" + index }
249+ label = { "Select all" }
250+ size = "xs"
251+ checked = { allChecked }
252+ indeterminate = { indeterminate }
253+ onChange = { ( ) =>
254+ widgetsHandlers . setState ( ( current ) =>
255+ current . map ( ( w ) => ( w . type === "checkbox" ? { ...w , value : allChecked ? "unchecked" : "checked" } : w ) )
256+ )
257+ }
258+ /> ) ;
259+ isFirstCheckbox = false ;
260+ }
241261 wdigetsTemp . push (
242262 < Checkbox
243263 classNames = { { root : classes . checkbox , label : classes . label } }
0 commit comments