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)}
);
};