import React from 'react'; import { StyleProp, ViewStyle } from 'react-native'; import { Socket } from 'socket.io-client'; import { ShowAlert } from '../../@types/types'; import { ModifySettingsOptions } from '../../methods/settingsMethods/modifySettings'; /** * Parameters supplied to `EventSettingsModal` for contextual state and server communication. * * @interface EventSettingsModalParameters * * **Display Preferences:** * @property {string} meetingDisplayType Current display mode selection (`'video' | 'media' | 'all'`). * @property {boolean} autoWave Whether auto-wave (audiograph) animations are enabled. * @property {boolean} forceFullDisplay Forces full-grid display regardless of active speaker. * @property {boolean} meetingVideoOptimized Indicates if video layout is optimized for performance. * * **Session Context:** * @property {string} roomName Active room identifier. * @property {Socket} socket Socket connection used when persisting settings. * @property {ShowAlert} [showAlert] Optional alert helper for user feedback. */ export interface EventSettingsModalParameters { meetingDisplayType: string; autoWave: boolean; forceFullDisplay: boolean; meetingVideoOptimized: boolean; roomName: string; socket: Socket; showAlert?: ShowAlert; } /** * Configuration options for the `EventSettingsModal` component. * * @interface EventSettingsModalOptions * * **Modal Control:** * @property {boolean} isEventSettingsModalVisible Controls visibility state. * @property {() => void} onEventSettingsClose Invoked when the modal should close. * * **Settings Actions:** * @property {(options: ModifySettingsOptions) => Promise} [onModifyEventSettings=modifySettings] Handler to persist updated settings. * * **Appearance:** * @property {'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'} [position='topRight'] Preferred anchor location. * @property {string} [backgroundColor='#83c0e9'] Background color for the modal card. * @property {StyleProp} [style] Additional styling for the modal container. * * **Permission Settings:** * @property {string} audioSetting Initial audio participant rule. * @property {string} videoSetting Initial video participant rule. * @property {string} screenshareSetting Initial screenshare rule. * @property {string} chatSetting Initial chat rule. * * **State Updaters:** * @property {(setting: string) => void} updateAudioSetting Persists audio rule updates. * @property {(setting: string) => void} updateVideoSetting Persists video rule updates. * @property {(setting: string) => void} updateScreenshareSetting Persists screenshare rule updates. * @property {(setting: string) => void} updateChatSetting Persists chat rule updates. * @property {(isVisible: boolean) => void} updateIsSettingsModalVisible Updates visibility flag from external triggers. * * **Session Context:** * @property {string} roomName Room identifier forwarded to the backend. * @property {Socket} socket Active socket connection used for updates. * @property {ShowAlert} [showAlert] Optional alert helper for in-modal feedback. * * **Advanced Render Overrides:** * @property {(options: { defaultContent: JSX.Element; dimensions: { width: number; height: number } }) => JSX.Element} [renderContent] * Override for customizing the internal layout. * @property {(options: { defaultContainer: JSX.Element; dimensions: { width: number; height: number } }) => JSX.Element} [renderContainer] * Override for swapping the modal container implementation. */ export interface EventSettingsModalOptions { isEventSettingsModalVisible: boolean; onEventSettingsClose: () => void; onModifyEventSettings?: (options: ModifySettingsOptions) => Promise; position?: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight'; backgroundColor?: string; audioSetting: string; videoSetting: string; screenshareSetting: string; chatSetting: string; updateAudioSetting: (setting: string) => void; updateVideoSetting: (setting: string) => void; updateScreenshareSetting: (setting: string) => void; updateChatSetting: (setting: string) => void; updateIsSettingsModalVisible: (isVisible: boolean) => void; roomName: string; socket: Socket; showAlert?: ShowAlert; style?: StyleProp; renderContent?: (options: { defaultContent: JSX.Element; dimensions: { width: number; height: number; }; }) => JSX.Element; renderContainer?: (options: { defaultContainer: JSX.Element; dimensions: { width: number; height: number; }; }) => JSX.Element; } export type EventSettingsModalType = (options: EventSettingsModalOptions) => JSX.Element; /** * EventSettingsModal enables hosts to adjust meeting-level permissions (audio, video, screenshare, chat) * in real time. It synchronizes with socket-based updates and exposes override hooks for custom layouts * or animated containers. * * ### Key Features * - Maps participant permission rules to intuitive picker controls. * - Persists changes using `modifySettings` by default, with override support. * - Provides render overrides and style props for bespoke UI. * - Leverages `updateIsSettingsModalVisible` for external state coordination. * - Supports corner anchoring and color theming. * * ### Accessibility * - Close button includes assistive labels for screen readers. * - Picker controls support keyboard navigation and voiceover prompts. * * @param {EventSettingsModalOptions} props Modal configuration options. * @returns {JSX.Element} Rendered event settings modal. * * @example Default configuration with host-managed settings. * ```tsx * * ``` * * @example Customized handler with animated container. * ```tsx * ( * {defaultContainer} * )} * /> * ``` */ declare const EventSettingsModal: React.FC; export default EventSettingsModal;