import { useChange, useRefState } from '@ringcentral/juno'; import clsx from 'clsx'; import type { ChangeEventHandler, FC } from 'react'; import React, { useEffect, useState } from 'react'; import { PageHeader, PageHeaderBack, PageHeaderRemain, PageHeaderTitle, } from '../BackHeader/PageHeader'; import { Button } from '../Button'; import IconLine from '../IconLine'; import Line from '../Line'; import Panel from '../Panel'; import Switch from '../Switch'; import TextInput from '../TextInput'; import { SettingGroup } from '../VideoPanel/SettingGroup'; import styles from './styles.scss'; export type EnvironmentData = { server: string; recordingHost: string; enabled: boolean; allowDataTracking: boolean; mfeDepsInfo?: string; }; export type EnvironmentPanelProps = { /** * If true, show the data tracking setting */ useDataTrackingSetting?: boolean; onSetData: (data: EnvironmentData) => void; defaultHidden?: boolean; } & EnvironmentData; export const EnvironmentPanel: FC = (props) => { const { recordingHost, defaultHidden = true, useDataTrackingSetting = false, onSetData, enabled, allowDataTracking, server, mfeDepsInfo = '', } = props; const [serverValueRef, setServerValue] = useRefState(server); const [mfeDepsInfoRef, setMfeDepsInfo] = useRefState(mfeDepsInfo); const [recordingHostValueRef, setRecordingHostValue] = useRefState(recordingHost); const [enabledDataTrackingRef, setEnabledDataTracking] = useRefState(allowDataTracking); const [enabledValueRef, setEnabledValue] = useRefState(enabled); const [hidden, setHidden] = useState(defaultHidden); useChange( () => { // when open panel, reset value again if (!hidden) { setServerValue(server, false); setMfeDepsInfo(mfeDepsInfo, false); setRecordingHostValue(recordingHost, false); setEnabledValue(enabled, false); setEnabledDataTracking(allowDataTracking, false); } }, () => hidden, ); const onServerChange: ChangeEventHandler = (e) => { setServerValue(e.currentTarget.value); }; const onMfeDepsInfoChange: ChangeEventHandler = (e) => { setMfeDepsInfo(e.currentTarget.value); }; const onRecordingHostChange: ChangeEventHandler = (e) => { setRecordingHostValue(e.currentTarget.value); }; const onToggleEnabled = () => { setEnabledValue(!enabledValueRef.current); }; const onToggleDataTracking = () => { setEnabledDataTracking(!enabledDataTrackingRef.current); }; const toggleEnv = () => { setHidden(!hidden); }; const onOk = () => { onSetData({ server: serverValueRef.current, mfeDepsInfo: mfeDepsInfoRef.current, recordingHost: recordingHostValueRef.current, enabled: enabledValueRef.current, allowDataTracking: enabledDataTrackingRef.current, }); toggleEnv(); }; const onCancel = () => { setServerValue(server); setMfeDepsInfo(mfeDepsInfo); setRecordingHostValue(recordingHost); setEnabledValue(enabled); setEnabledDataTracking(allowDataTracking); toggleEnv(); }; useEffect(() => { if (typeof window !== 'undefined') { (window as any).toggleEnv = toggleEnv; } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const serverValue = serverValueRef.current; const mfeDepsInfoValue = mfeDepsInfoRef.current; const enabledValue = enabledValueRef.current; const enabledDataTrackingValue = enabledDataTrackingRef.current; const recordingHostValue = recordingHostValueRef.current; if (hidden) { return null; } const hasChanges = !( serverValue === server && mfeDepsInfoValue === mfeDepsInfo && enabledValue === enabled && recordingHostValue === recordingHost && enabledDataTrackingValue === allowDataTracking ); return (
Environment Server Recording Host } > Enable {mfeDepsInfo ? ( MFE setting ) : null} {useDataTrackingSetting && ( } > Enable Data Tracking After clicking save, remember to{' '}

refresh

to take effect
(all tabs need to be closed) when you enable that manually, the enable will take two hours enable, will auto close after{' '} two hours
)}
); };