import { type SessionRecorderOptions, WidgetButtonPlacement } from '../types' import { BASE_CONFIG } from './defaults' import { isValidBoolean, isValidEnum, isValidString } from './validators' export const getWidgetConfig = (config: SessionRecorderOptions['widget']) => { const textOverrides = getTextOverridesConfig( config?.textOverrides, BASE_CONFIG.widget.textOverrides, ) const def = { enabled: true, button: { visible: true, placement: WidgetButtonPlacement.bottomRight }, textOverrides, } const placementCandidate = config?.button?.placement || def.button.placement return { textOverrides, enabled: isValidBoolean(config && config.enabled, def.enabled), button: { visible: isValidBoolean( config && config.button && config.button.visible, def.button.visible, ), placement: isValidEnum( placementCandidate, def.button.placement, Object.values(WidgetButtonPlacement), ), }, } } const getTextOverridesConfig = (config: any, defaultConfig: any) => { if (!config || typeof config !== 'object') { return defaultConfig } return Object.keys(defaultConfig).reduce( (acc, key) => { acc[key] = isValidString(config[key], defaultConfig[key]) return acc }, {} as Record, ) }