UNPKG

@thoughtspot/visual-embed-sdk

Version:
82 lines (74 loc) 3.06 kB
import { DefaultAppInitData, ErrorDetailsTypes, EmbedErrorCodes } from '../types'; import { validateHttpUrl } from '../utils'; import { ERROR_MESSAGE } from '../errors'; import type { SpotterSidebarViewConfig } from './conversation'; import type { VisualizationOverrides } from '../types'; /** * Resolves enablePastConversationsSidebar with * spotterSidebarConfig taking precedence over the * standalone flag. */ export const resolveEnablePastConversationsSidebar = (params: { spotterSidebarConfigValue?: boolean; standaloneValue?: boolean; }): boolean | undefined => ( params.spotterSidebarConfigValue !== undefined ? params.spotterSidebarConfigValue : params.standaloneValue ); export function buildSpotterSidebarAppInitData<T extends DefaultAppInitData>( defaultAppInitData: T, viewConfig: { spotterSidebarConfig?: SpotterSidebarViewConfig; enablePastConversationsSidebar?: boolean; visualOverrides?: VisualizationOverrides; }, handleError: (err: any) => void, ): T & { embedParams?: { spotterSidebarConfig?: SpotterSidebarViewConfig; visualOverridesParams?: VisualizationOverrides | null; }; } { const { spotterSidebarConfig, enablePastConversationsSidebar, visualOverrides } = viewConfig; const resolvedEnablePastConversations = resolveEnablePastConversationsSidebar({ spotterSidebarConfigValue: spotterSidebarConfig?.enablePastConversationsSidebar, standaloneValue: enablePastConversationsSidebar, }); const hasConfig = spotterSidebarConfig || resolvedEnablePastConversations !== undefined; if (!hasConfig) { if (visualOverrides === undefined) { return defaultAppInitData; } return { ...defaultAppInitData, embedParams: { visualOverridesParams: visualOverrides }, }; } const resolvedSidebarConfig: SpotterSidebarViewConfig = { ...spotterSidebarConfig, ...(resolvedEnablePastConversations !== undefined && { enablePastConversationsSidebar: resolvedEnablePastConversations, }), }; if (resolvedSidebarConfig.spotterDocumentationUrl !== undefined) { const [isValid, validationError] = validateHttpUrl(resolvedSidebarConfig.spotterDocumentationUrl); if (!isValid) { handleError({ errorType: ErrorDetailsTypes.VALIDATION_ERROR, message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL, code: EmbedErrorCodes.INVALID_URL, error: validationError?.message || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL, }); delete resolvedSidebarConfig.spotterDocumentationUrl; } } return { ...defaultAppInitData, embedParams: { ...((defaultAppInitData as any).embedParams || {}), spotterSidebarConfig: resolvedSidebarConfig, ...(visualOverrides !== undefined ? { visualOverridesParams: visualOverrides } : {}), }, }; }