import {Settings} from '@gravity-ui/navigation'; import {Text} from '@gravity-ui/uikit'; import {cn} from '../../utils/cn'; import {Setting} from './Setting'; import type {SettingProps, SettingsInfoFieldProps} from './Setting'; import type {SettingsPage, SettingsSection, YDBEmbeddedUISettings} from './settings'; import './UserSettings.scss'; const b = cn('ydb-user-settings'); interface UserSettingsProps { settings: YDBEmbeddedUISettings; } type UserSettingsItem = SettingProps | SettingsInfoFieldProps; function renderSettingsItem(setting: UserSettingsItem) { if (setting.type === 'info') { return ( {setting.content} ); } // `effectiveValue` is consumed by `Setting`, but should not // be forwarded to the external Settings.Item component. const {description, effectiveValue: _effectiveValue, ...rest} = setting; return ( {description ? ( {description} ) : null} ); } function renderSettingsSection(section: SettingsSection, hideTitle?: boolean) { const {id, title, settings = []} = section; return ( {settings.map(renderSettingsItem)} ); } function renderSettingsPage(page: SettingsPage) { const {id, title, icon, sections = [], hideTitle} = page; return ( {sections.map((section) => renderSettingsSection(section, hideTitle))} ); } export const UserSettings = ({settings: userSettings}: UserSettingsProps) => { return (
{userSettings.map(renderSettingsPage)}
); };