1
- import React , { useCallback , useEffect } from "react" ;
1
+ import React , { useCallback , useEffect , useState } from "react" ;
2
2
import PropTypes from "prop-types" ;
3
3
import { useForm } from "react-hook-form" ;
4
4
import styles from "./RoomSettingsSidebar.scss" ;
@@ -61,6 +61,20 @@ export function RoomSettingsSidebar({
61
61
[ setValue ]
62
62
) ;
63
63
64
+ const [ bitECSLoaderEnabled , setBitECSLoaderEnabled ] = useState ( shouldUseNewLoader ( ) ) ;
65
+ const handleBitECSChange = useCallback (
66
+ evt => {
67
+ setValue ( "user_data.hubs_use_bitecs_based_client" , evt . target . checked ) ;
68
+ setBitECSLoaderEnabled ( evt . target . checked ) ;
69
+ if ( ! evt . target . checked ) {
70
+ [ ...addons . entries ( ) ] . map ( ( [ id , _ ] ) => {
71
+ setValue ( `user_data.addons.${ id } ` , evt . target . checked ) ;
72
+ } ) ;
73
+ }
74
+ } ,
75
+ [ setValue , setBitECSLoaderEnabled ]
76
+ ) ;
77
+
64
78
return (
65
79
< Sidebar
66
80
title = { < FormattedMessage id = "room-settings-sidebar.title" defaultMessage = "Room Settings" /> }
@@ -216,17 +230,18 @@ export function RoomSettingsSidebar({
216
230
defaultMessage = "Enable bitECS based Client"
217
231
/>
218
232
}
233
+ defaultChecked = { shouldUseNewLoader ( ) }
234
+ onChange = { handleBitECSChange }
219
235
description = {
220
236
< FormattedMessage
221
237
id = "room-settings-sidebar.bitecs-client-activation-description"
222
238
defaultMessage = "Enable or disable the new Client, which is implemented with bitECS for simplicity and extensibility."
223
239
/>
224
240
}
225
- { ...register ( "user_data.hubs_use_bitecs_based_client" ) }
226
241
/>
227
242
</ InputField >
228
243
< InputField label = { < FormattedMessage id = "room-settings-sidebar.add-ons" defaultMessage = "Add-ons" /> } fullWidth >
229
- { ! shouldUseNewLoader ( ) && (
244
+ { ! bitECSLoaderEnabled && (
230
245
< label className = { styles . label } >
231
246
< FormattedMessage
232
247
id = "room-settings-sidebar.addons-disabled"
@@ -239,7 +254,7 @@ export function RoomSettingsSidebar({
239
254
key = { addon . name }
240
255
id = { id }
241
256
label = { addon . name }
242
- disabled = { ! shouldUseNewLoader ( ) }
257
+ disabled = { ! bitECSLoaderEnabled }
243
258
defaultChecked = { isAddonEnabled ( APP , id ) }
244
259
onChange = { handleAddonChange }
245
260
description = { addon . description }
0 commit comments