@thoughtspot/visual-embed-sdk
Version:
ThoughtSpot Embed SDK
1,355 lines (1,346 loc) • 360 kB
TypeScript
// Generated by dts-bundle v0.7.3
// Dependencies for this module:
// ../../../react
// ../../../eventemitter3
import React from 'react';
import EventEmitter from 'eventemitter3';
interface SearchProps extends EmbedProps, SearchViewConfig {
}
interface PreRenderProps {
/**
* PreRender id to be used for PreRendering the embed.
* Use PreRender to render the embed in the background and then
* show or hide the rendered embed using showPreRender or hidePreRender respectively.
* @example
* ```js
* const embed = new LiveboardEmbed('#embed', {
* ... // other liveboard view config
* preRenderId: "preRenderId-123"
* });
* embed.showPreRender();
* ```
*
* Use PreRendered react component for pre rendering embed components.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedLiveboardEmbed preRenderId="someId" liveboardId="libId" />
* }
* ```
* function MyComponent() {
* return <LiveboardEmbed preRenderId="someId" liveboardId="libId" />
* }
* ```
* @version SDK: 1.25.0 | Thoughtspot: 9.6.0.cl
*/
preRenderId: string;
}
/**
* React component for Search Embed.
* @example
* ```tsx
* function Search() {
* return <SearchEmbed
* dataSource="dataSourceId"
* searchOptions={{ searchTokenString: "[revenue]" }}
* />
* }
* ```
*/
export const SearchEmbed: React.ForwardRefExoticComponent<SearchProps & React.RefAttributes<_SearchEmbed>>;
export const PreRenderedSearchEmbed: React.ForwardRefExoticComponent<SearchProps & PreRenderProps & React.RefAttributes<_SearchEmbed>>;
interface AppProps extends EmbedProps, AppViewConfig {
}
/**
* React component for Full app Embed.
* @example
* ```tsx
* function Search() {
* return <AppEmbed
* showPrimaryNavbar={false}
* pageId={Page.Liveboards}
* onError={(error) => console.error(error)}
* />
* }
* ```
*/
export const AppEmbed: React.ForwardRefExoticComponent<AppProps & React.RefAttributes<_AppEmbed>>;
/**
* React component for PreRendered Liveboard embed.
*
* PreRenderedAppEmbed will preRender the SearchBarEmbed and will be hidden by
* default.
*
* AppEmbed with preRenderId passed will call showPreRender on the embed.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedAppEmbed preRenderId="someId" showPrimaryNavbar={false} />
* }
* ```
* function MyComponent() {
* return <AppEmbed preRenderId="someId" showPrimaryNavbar={false} />
* }
* ```
*/
export const PreRenderedAppEmbed: React.ForwardRefExoticComponent<AppProps & PreRenderProps & React.RefAttributes<_AppEmbed>>;
interface LiveboardProps extends EmbedProps, LiveboardViewConfig {
}
/**
* React component for Liveboard embed.
* @example
* ```tsx
* function Liveboard() {
* return <LiveboardEmbed
* liveboardId="liveboardId"
* fullHeight={true} {/* default false *\/}
* onLiveboardRendered={() => console.log('Liveboard rendered')}
* vizId="vizId" {/* if doing viz embed *\/}
* />
* }
* ```
*/
export const LiveboardEmbed: React.ForwardRefExoticComponent<LiveboardProps & React.RefAttributes<_LiveboardEmbed>>;
export const PinboardEmbed: React.ForwardRefExoticComponent<LiveboardProps & React.RefAttributes<_LiveboardEmbed>>;
/**
* React component for PreRendered Liveboard embed.
*
* PreRenderedLiveboardEmbed will preRender the liveboard and will be hidden by default.
*
* LiveboardEmbed with preRenderId passed will call showPreRender on the embed.
*
* If LiveboardEmbed is rendered before PreRenderedLiveboardEmbed is rendered it
* tries to preRender the LiveboardEmbed, so it is recommended to use pass the
* liveboardId to both the components.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedLiveboardEmbed preRenderId="someId" liveboardId="libId" />
* }
* ```
* function MyComponent() {
* return <LiveboardEmbed preRenderId="someId" liveboardId="libId" />
* }
* ```
*/
export const PreRenderedLiveboardEmbed: React.ForwardRefExoticComponent<LiveboardProps & PreRenderProps & React.RefAttributes<_LiveboardEmbed>>;
export const PreRenderedPinboardEmbed: React.ForwardRefExoticComponent<LiveboardProps & PreRenderProps & React.RefAttributes<_LiveboardEmbed>>;
interface SearchBarEmbedProps extends EmbedProps, SearchBarViewConfig {
}
/**
* React component for Search bar embed.
* @example
* ```tsx
* function SearchBar() {
* return <SearchBarEmbed
* dataSource="dataSourceId"
* searchOptions={{ searchTokenString: "[revenue]" }}
* />
* }
* ```
*/
export const SearchBarEmbed: React.ForwardRefExoticComponent<SearchBarEmbedProps & React.RefAttributes<_SearchBarEmbed>>;
/**
* React component for PreRendered Liveboard embed.
*
* PreRenderedSearchBarEmbed will preRender the SearchBarEmbed and will be hidden by
* default.
*
* SearchBarEmbed with preRenderId passed will call showPreRender on the embed.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedSearchBarEmbed preRenderId="someId" dataSource="dataSourceId" />
* }
* ```
* function MyComponent() {
* return <SearchBarEmbed preRenderId="someId" dataSource="dataSourceId" />
* }
* ```
*/
export const PreRenderedSearchBarEmbed: React.ForwardRefExoticComponent<SearchBarEmbedProps & PreRenderProps & React.RefAttributes<_SearchBarEmbed>>;
interface SageEmbedProps extends EmbedProps, SageViewConfig {
}
/**
* React component for LLM based search Sage embed.
* @example
* ```tsx
* function Sage() {
* return <SageEmbed
* showObjectResults={true}
* ... other view config props or event listeners.
* />
* }
* ```
*/
export const SageEmbed: React.ForwardRefExoticComponent<SageEmbedProps & React.RefAttributes<_SageEmbed>>;
/**
* React component for PreRendered Liveboard embed.
*
* PreRenderedSageEmbed will preRender the SearchBarEmbed and will be hidden by
* default.
*
* SageEmbed with preRenderId passed will call showPreRender on the embed.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedSageEmbed preRenderId="someId" showObjectResults={true} />
* }
* ```
* function MyComponent() {
* return <SageEmbed preRenderId="someId" showObjectResults={true} />
* }
* ```
*/
export const PreRenderedSageEmbed: React.ForwardRefExoticComponent<SageEmbedProps & PreRenderProps & React.RefAttributes<_SageEmbed>>;
interface SpotterEmbedProps extends EmbedProps, SpotterEmbedViewConfig {
}
interface ConversationEmbedProps extends EmbedProps, ConversationViewConfig {
}
/**
* React component for LLM based conversation BI.
* @example
* ```tsx
* function Sage() {
* return <SpotterEmbed
* worksheetId="<worksheet-id-here>"
* searchOptions={{
* searchQuery: "<search query to start with>"
* }}
* ... other view config props or event listeners.
* />
* }
* ```
*/
export const SpotterEmbed: React.ForwardRefExoticComponent<SpotterEmbedProps & React.RefAttributes<_SpotterEmbed>>;
/**
* React component for LLM based conversation BI.
* @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl
* Use {@link SpotterEmbed} instead
* @example
* ```tsx
* function Sage() {
* return <ConversationEmbed
* worksheetId="<worksheet-id-here>"
* searchOptions={{
* searchQuery: "<search query to start with>"
* }}
* ... other view config props or event listeners.
* />
* }
* ```
*/
export const ConversationEmbed: React.ForwardRefExoticComponent<ConversationEmbedProps & React.RefAttributes<_ConversationEmbed>>;
/**
* React component for individual conversation messages from SpotterAgent.
* This component is used internally by the useSpotterAgent hook.
* @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl
*/
interface ConversationMessageProps extends EmbedProps, SpotterAgentMessageViewConfig {
}
export const ConversationMessage: React.ForwardRefExoticComponent<ConversationMessageProps & React.RefAttributes<_ConversationMessage>>;
/**
* React component for displaying individual conversation messages from SpotterAgent.
*
* This component renders a single message response from your ThoughtSpot conversation,
* showing charts, visualizations, or text responses based on the user's query.
*
* @example
* ```tsx
* const { sendMessage } = useSpotterAgent({ worksheetId: 'worksheetId' });
* const result = await sendMessage('show me sales by region');
*
* if (!result.error) {
* // Simple usage - just pass the message data
* <SpotterMessage message={result.message} />
*
* // With optional query for context
* <SpotterMessage
* message={result.message}
* query={result.query}
* />
* }
* ```
* @version SDK: 1.39.0 | ThoughtSpot: 10.11.0.cl
*/
export const SpotterMessage: React.ForwardRefExoticComponent<{
message: SpotterAgentMessageViewConfig;
query?: string;
} & Omit<EmbedProps, keyof SpotterAgentMessageViewConfig> & React.RefAttributes<_ConversationMessage>>;
/**
* React component for PreRendered Conversation embed.
*
* PreRenderedConversationEmbed will preRender the SpotterEmbed and will be hidden by
* default.
*
* SageEmbed with preRenderId passed will call showPreRender on the embed.
* @example
* ```tsx
* function LandingPageComponent() {
* return <PreRenderedConversationEmbed preRenderId="someId" worksheetId={"id-"} />
* }
* ```
* function MyComponent() {
* return <SpotterEmbed preRenderId="someId" worksheetId="id" />
* }
* ```
*/
export const PreRenderedConversationEmbed: React.ForwardRefExoticComponent<SpotterEmbedProps & PreRenderProps & React.RefAttributes<_SpotterEmbed>>;
type EmbedComponent = typeof SearchEmbed | typeof AppEmbed | typeof LiveboardEmbed | typeof SearchBarEmbed | typeof SageEmbed | typeof ConversationMessage | typeof SpotterMessage | typeof SpotterEmbed | typeof ConversationEmbed;
/**
* Get a reference to the embed component to trigger events on the component.
* @example
* ```
* function Component() {
* const ref = useEmbedRef();
* useEffect(() => {
* ref.current.trigger(
* EmbedEvent.UpdateRuntimeFilter,
* [{ columnName: 'name', operator: 'EQ', values: ['value']}]);
* }, [])
* return <LiveboardEmbed ref={ref} liveboardId={<id>} />
* }
* ```
* @returns {React.MutableRefObject<T extends TsEmbed>} ref
*/
export function useEmbedRef<T extends EmbedComponent>(): React.MutableRefObject<React.ComponentRef<T>>;
/**
*
* @param config - EmbedConfig
* @returns AuthEventEmitter
* @example
* ```
* function Component() {
* const authEE = useInit({ ...initConfig });
* return <LiveboardEmbed ref={ref} liveboardId={<id>} />
* }
* ```
* @version SDK: 1.36.2 | ThoughtSpot: *
*/
export function useInit(config: EmbedConfig): React.MutableRefObject<AuthEventEmitter>;
/**
* React hook for interacting with SpotterAgent AI conversations.
*
* This hook provides a sendMessage function that allows you to send natural language
* queries to your data and get back AI-generated responses with visualizations.
*
* @param config - Configuration object containing worksheetId and other options
* @returns Object with sendMessage function that returns conversation results
* @example
* ```tsx
* const { sendMessage } = useSpotterAgent({ worksheetId: 'worksheetId' });
*
* const handleQuery = async () => {
* const result = await sendMessage('show me sales by region');
*
* if (!result.error) {
* // Display the message response
* <SpotterMessage message={result.message} />
* } else {
* console.error('Error:', result.error);
* }
* };
* ```
* @version SDK: 1.39.0 | ThoughtSpot: 10.11.0.cl
*/
export function useSpotterAgent(config: SpotterAgentEmbedViewConfig): {
sendMessage: (query: string) => Promise<{
error: any;
query?: undefined;
message?: undefined;
} | {
query: string;
message: {
worksheetId: string;
convId: any;
messageId: any;
sessionId: any;
genNo: any;
acSessionId: any;
acGenNo: any;
};
error?: undefined;
}>;
};
/**
* Copyright (c) 2023
*
* ThoughtSpot Visual Embed SDK for embedding ThoughtSpot analytics
* in other web applications.
* @summary ThoughtSpot Visual Embed SDK
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
*/
export { init, logout, prefetch, executeTML, exportTML, executeTMLInput, exportTMLInput, getEmbedConfig as getInitConfig, getSessionInfo, tokenizedFetch, getAnswerFromQuery, createLiveboardWithAnswers, SearchEmbed, SearchBarEmbed, PinboardEmbed, LiveboardEmbed, SageEmbed, AppEmbed, SpotterAgentEmbed, SpotterAgentEmbedViewConfig, BodylessConversationViewConfig, BodylessConversation, SpotterEmbed, SpotterEmbedViewConfig, ConversationViewConfig, ConversationEmbed, AuthFailureType, AuthStatus, AuthEvent, AuthEventEmitter, AnswerService, SessionInterface, UnderlyingDataPoint, Page, AuthType, RuntimeFilter, RuntimeFilterOp, EmbedEvent, HostEvent, DataSourceVisualMode, Action, ContextMenuTriggerOptions, EmbedConfig, SearchViewConfig, SearchBarViewConfig, LiveboardViewConfig, SageViewConfig, AppViewConfig, PrefetchFeatures, FrameParams, HomeLeftNavItem, HomepageModule, DOMSelector, MessageOptions, MessageCallback, MessagePayload, CustomisationsInterface, CustomStyles, customCssInterface, CustomCssVariables, RuntimeParameter, LogLevel, uploadMixpanelEvent, MIXPANEL_EVENT, HomePageSearchBarMode, PrimaryNavbarVersion, HomePage, ListPage, VizPoint, CustomActionPayload, UIPassthroughEvent, ListPageColumns, DataPanelCustomColumnGroupsAccordionState, };
export declare let loggedInStatus: boolean;
export declare let samlAuthWindow: Window;
export declare let samlCompletionPromise: Promise<void>;
export declare const SSO_REDIRECTION_MARKER_GUID = "5e16222e-ef02-43e9-9fbd-24226bf3ce5b";
/**
* Enum for auth failure types. This is the parameter passed to the listner
* of {@link AuthStatus.FAILURE}.
* @group Authentication / Init
*/
export declare enum AuthFailureType {
SDK = "SDK",
NO_COOKIE_ACCESS = "NO_COOKIE_ACCESS",
EXPIRY = "EXPIRY",
OTHER = "OTHER",
IDLE_SESSION_TIMEOUT = "IDLE_SESSION_TIMEOUT",
UNAUTHENTICATED_FAILURE = "UNAUTHENTICATED_FAILURE"
}
/**
* Enum for auth status emitted by the emitter returned from {@link init}.
* @group Authentication / Init
*/
export declare enum AuthStatus {
/**
* Emits when the SDK fails to authenticate
*/
FAILURE = "FAILURE",
/**
* Emits when the SDK authenticates successfully
*/
SDK_SUCCESS = "SDK_SUCCESS",
/**
* @hidden
* Emits when iframe is loaded and session info is available
*/
SESSION_INFO_SUCCESS = "SESSION_INFO_SUCCESS",
/**
* Emits when the app sends an authentication success message
*/
SUCCESS = "SUCCESS",
/**
* Emits when a user logs out
*/
LOGOUT = "LOGOUT",
/**
* Emitted when inPopup is true in the SAMLRedirect flow and the
* popup is waiting to be triggered either programmatically
* or by the trigger button.
* @version SDK: 1.19.0
*/
WAITING_FOR_POPUP = "WAITING_FOR_POPUP",
/**
* Emitted when the SAML popup is closed without authentication
*/
SAML_POPUP_CLOSED_NO_AUTH = "SAML_POPUP_CLOSED_NO_AUTH"
}
/**
* Event emitter returned from {@link init}.
* @group Authentication / Init
*/
export interface AuthEventEmitter {
/**
* Register a listener on Auth failure.
* @param event
* @param listener
*/
on(event: AuthStatus.FAILURE, listener: (failureType: AuthFailureType) => void): this;
/**
* Register a listener on Auth SDK success.
* @param event
* @param listener
*/
on(event: AuthStatus.SDK_SUCCESS | AuthStatus.LOGOUT | AuthStatus.WAITING_FOR_POPUP | AuthStatus.SAML_POPUP_CLOSED_NO_AUTH, listener: () => void): this;
on(event: AuthStatus.SUCCESS, listener: (sessionInfo: any) => void): this;
once(event: AuthStatus.FAILURE, listener: (failureType: AuthFailureType) => void): this;
once(event: AuthStatus.SDK_SUCCESS | AuthStatus.LOGOUT | AuthStatus.WAITING_FOR_POPUP | AuthStatus.SAML_POPUP_CLOSED_NO_AUTH, listener: () => void): this;
once(event: AuthStatus.SUCCESS, listener: (sessionInfo: any) => void): this;
/**
* Trigger an event on the emitter returned from init.
* @param {@link AuthEvent}
*/
emit(event: AuthEvent, ...args: any[]): boolean;
/**
* Remove listener from the emitter returned from init.
* @param event
* @param listener
* @param context
* @param once
*/
off(event: AuthStatus, listener: (...args: any[]) => void, context: any, once: boolean): this;
/**
* Remove all the event listeners
* @param event
*/
removeAllListeners(event: AuthStatus): this;
}
/**
* Events which can be triggered on the emitter returned from {@link init}.
* @group Authentication / Init
*/
export declare enum AuthEvent {
/**
* Manually trigger the SSO popup. This is useful when
* authStatus is SAMLRedirect/OIDCRedirect and inPopup is set to true
*/
TRIGGER_SSO_POPUP = "TRIGGER_SSO_POPUP"
}
/**
*
*/
export declare function getAuthEE(): EventEmitter<AuthStatus | AuthEvent>;
/**
*
* @param eventEmitter
*/
export declare function setAuthEE(eventEmitter: EventEmitter<AuthStatus | AuthEvent>): void;
/**
*
*/
export declare function notifyAuthSDKSuccess(): void;
/**
*
*/
export declare function notifyAuthSuccess(): Promise<void>;
/**
*
* @param failureType
*/
export declare function notifyAuthFailure(failureType: AuthFailureType): void;
/**
*
*/
export declare function notifyLogout(): void;
/**
* Services to be called after the login is successful,
* This should be called after the cookie is set for cookie auth or
* after the token is set for cookieless.
* @return {Promise<void>}
* @example
* ```js
* await postLoginService();
* ```
* @version SDK: 1.28.3 | ThoughtSpot: *
*/
export declare function postLoginService(): Promise<void>;
/**
* Return releaseVersion if available
*/
export declare function getReleaseVersion(): string;
/**
* Perform token based authentication
* @param embedConfig The embed configuration
*/
export declare const doTokenAuth: (embedConfig: EmbedConfig) => Promise<boolean>;
/**
* Validate embedConfig parameters required for cookielessTokenAuth
* @param embedConfig The embed configuration
*/
export declare const doCookielessTokenAuth: (embedConfig: EmbedConfig) => Promise<boolean>;
/**
* Perform basic authentication to the ThoughtSpot cluster using the cluster
* credentials.
*
* Warning: This feature is primarily intended for developer testing. It is
* strongly advised not to use this authentication method in production.
* @param embedConfig The embed configuration
*/
export declare const doBasicAuth: (embedConfig: EmbedConfig) => Promise<boolean>;
export declare const doSamlAuth: (embedConfig: EmbedConfig) => Promise<boolean>;
export declare const doOIDCAuth: (embedConfig: EmbedConfig) => Promise<boolean>;
export declare const logout: (embedConfig: EmbedConfig) => Promise<boolean>;
/**
* Perform authentication on the ThoughtSpot cluster
* @param embedConfig The embed configuration
*/
export declare const authenticate: (embedConfig: EmbedConfig) => Promise<boolean>;
/**
* Check if we are authenticated to the ThoughtSpot cluster
*/
export declare const isAuthenticated: () => boolean;
/**
* @group Embed components
*/
export interface SearchBarViewConfig extends BaseViewConfig, SearchLiveboardCommonViewConfig {
/**
* The array of data source GUIDs to set on load.
* Only a single data source is supported currently.
*
* Supported embed types: `SearchBarEmbed`
* @deprecated Use `dataSource` instead
* @version: SDK: 1.1.0 | ThoughtSpot: 8.1.1-sw
* @example
* ```js
* const embed = new SearchBarEmbed('#tsEmbed', {
* ... //other embed view config
* dataSources:['id-2345','id-2345'],
* })
* ```
*/
dataSources?: string[];
/**
* Pass the ID of the source to be selected.
*
* Supported embed types: `SearchBarEmbed`
* @version: SDK: 1.19.0, ThoughtSpot 9.0.0.cl, 9.0.1.sw
* @example
* ```js
* const embed = new SearchBarEmbed('#tsEmbed', {
* ... //other embed view config
* dataSource:'id-2345',
* })
* ```
*/
dataSource?: string;
/**
* Boolean to define if the last selected data source should be used
*
* Supported embed types: `SearchBarEmbed`
* @version: SDK: 1.24.0, ThoughtSpot 9.5.0.cl, 9.5.0.sw
* @example
* ```js
* const embed = new SearchBarEmbed('#tsEmbed', {
* ... //other embed view config
* useLastSelectedSources:false,
* })
* ```
*/
useLastSelectedSources?: boolean;
/**
* Configuration for search options.
* Includes the following properties:
*
* `searchTokenString`: Search tokens to pass in the query.
*
* `executeSearch`: Boolean to define if the search should be executed or not.
* If it is executed, the focus is placed on the results.
* If it’s not executed, the focus is placed at the end of
* the token string in the search bar.
*
* Supported embed types: `SearchBarEmbed`
* @version: SDK: 1.2.0 | ThoughtSpot: 9.4.0.sw
* @example
* ```js
* const embed = new SearchBarEmbed('#tsEmbed', {
* ... //other embed view config
* searchOptions: {
* searchTokenString: '[quantity purchased] [region]',
* executeSearch: true,
* }
* })
* ```
*/
searchOptions?: SearchOptions;
/**
* Exclude the search token string from the URL.
* If set to true, the search token string is not appended to the URL.
*
* Supported embed types: `SearchBarEmbed`
* @version: SDK: 1.35.7 | ThoughtSpot: 10.8.0.cl
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* searchOptions: {
* searchTokenString: '[quantity purchased] [region]',
* executeSearch: true,
* },
* excludeSearchTokenStringFromURL: true,
* });
* ```
*/
excludeSearchTokenStringFromURL?: boolean;
}
export interface SearchAppInitData extends DefaultAppInitData {
searchOptions: SearchOptions;
}
/**
* Embed ThoughtSpot search bar
* @version: SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1-sw
* @group Embed components
*/
export declare class SearchBarEmbed extends TsEmbed {
/**
* The view configuration for the embedded ThoughtSpot search bar.
*/
protected viewConfig: SearchBarViewConfig;
protected embedComponentType: string;
constructor(domSelector: string, viewConfig: SearchBarViewConfig);
/**
* Render the embedded ThoughtSpot search
*/
render(): Promise<SearchBarEmbed>;
protected getSearchInitData(): {
searchOptions: SearchOptions;
};
protected getAppInitData(): Promise<SearchAppInitData>;
}
/**
* Copyright (c) 2023
*
* Embed ThoughtSpot Sage
* @summary TS Sage embed
* @author Mourya Balabhadra <mourya.balabhadra@thoughtspot.com>
*/
/**
* Configuration for search options
*/
export interface SearchOptions {
/**
* The query string to pass for Natural Language Search.
*/
searchQuery: string;
/**
* Boolean to define if the search should be executed or not.
* If it is executed, the focus is placed on the results.
* If it’s not executed, the focus is placed at the end of
* the token string in the search bar.
*/
executeSearch?: boolean;
}
/**
* The configuration attributes for the embedded Natural language search view. Based on
* GPT and LLM.
* @version: SDK: 1.23.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
*
* Note: This embed will be deprecated from SDK: 1.40.0 | ThoughtSpot: 10.13.0.cl
* @group Embed components
*/
export interface SageViewConfig extends SearchLiveboardCommonViewConfig, Omit<BaseViewConfig, 'primaryAction' | 'runtimeFilters' | 'runtimeParameters' | 'excludeRuntimeFiltersfromURL' | 'excludeRuntimeParametersfromURL'> {
/**
* If set to true, a list of Liveboard and Answers related
* to the natural language search will be shown below the
* AI generated answer.
* @deprecated Currently Liveboard and Answers related
* to the natural language search will not be shown for sage
* embed
*/
showObjectResults?: boolean;
/**
* flag used by the TS product tour page to show the blue search bar
* even after the search is completed. This is different from ThoughtSpot Embedded
* Sage Embed experience where it mimics closer to the non-embed case.
* The Sample questions container is collapsed when this value is set after
* does a search.
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl
* @hidden
*/
isProductTour?: boolean;
/**
* Show or hide the search bar title.
* @version SDK: 1.29.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
* @deprecated ThoughtSpot: 9.10.0.cl | search bar doesn't have the title from 9.10.0.cl
*/
hideSearchBarTitle?: boolean;
/**
* Show or hide the Answer header, that is, the `AI Answer` title
* at the top of the Answer page.
* @version SDK: 1.26.0 | ThoughtSpot: 9.10.0.cl
*/
hideSageAnswerHeader?: boolean;
/**
* Disable the worksheet selection option.
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
*/
disableWorksheetChange?: boolean;
/**
* Hide the worksheet selection panel.
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
*/
hideWorksheetSelector?: boolean;
/**
* Show or hide autocomplete suggestions for the search query string.
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
*/
hideAutocompleteSuggestions?: boolean;
/**
* Show or hide autocomplete suggestions for the search query string.
* @deprecated
* Currently, the object suggestions will not be shown for Natural Language Search.
* You can use {@link hideAutocompleteSuggestions} instead.
*/
showObjectSuggestions?: boolean;
/**
* Show or hide sample questions.
* The sample questions are autogenerated based on the worksheet
* selected for the search operation.
*
* Supported embed types: `SageEmbed`
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
* @example
* ```js
* const embed = new SageEmbed('#tsEmbed', {
* ... //other embed view config
* hideSampleQuestions : true,
* })
* ```
*/
hideSampleQuestions?: boolean;
/**
* The data source GUID (Worksheet GUID) to set on load.
*/
dataSource?: string;
/**
* Includes the following properties:
*
* `searchQuery`: The search query string to pass in the search bar.
* Supports Natural Language Search queries.
*
* `executeSearch`: Boolean to define if the search should be executed or not.
* If it is executed, the focus is placed on the results.
* If it’s not executed, the focus is placed at the end of
* the token string in the search bar.
*
* Supported embed types: `SageEmbed`
* @example
* ```js
* searchOptions: {
* searchQuery: 'average sales by country and product type',
* executeSearch: true,
* }
* ```
* @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
*/
searchOptions?: SearchOptions;
}
/**
* Embed ThoughtSpot LLM and GPT-based Natural Language Search component.
* @version: SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.1-sw
*
* Note: This embed will be deprecated from SDK: 1.40.0 | ThoughtSpot: 10.13.0.cl
* @group Embed components
*/
export declare class SageEmbed extends V1Embed {
/**
* The view configuration for the embedded ThoughtSpot sage.
*
*/
protected viewConfig: SageViewConfig;
constructor(domSelector: DOMSelector, viewConfig: SageViewConfig);
/**
* Constructs a map of parameters to be passed on to the
* embedded Eureka or Sage search page.
* @returns {string} query string
*/
protected getEmbedParams(): string;
/**
* Construct the URL of the embedded ThoughtSpot sage to be
* loaded in the iframe
* @returns {string} iframe url
*/
getIFrameSrc(): string;
/**
* Render the embedded ThoughtSpot Sage
* @returns {SageEmbed} Eureka/Sage embed
*/
render(): Promise<SageEmbed>;
}
/**
* Copyright (c) 2022
*
* Embed ThoughtSpot search or a saved answer
* @summary Search embed
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
*/
/**
* Configuration for search options.
*
*/
export interface SearchOptions {
/**
* Search tokens to pass in the query.
*/
searchTokenString: string;
/**
* Boolean to define if the search should be executed or not.
* If it is executed, the focus is placed on the results.
* If it’s not executed, the focus is placed at the end of
* the token string in the search bar.
*/
executeSearch?: boolean;
}
/**
* Define the initial state os column custom group accordions
* in data panel v2.
*/
export declare enum DataPanelCustomColumnGroupsAccordionState {
/**
* Expand all the accordion initially in data panel v2.
*/
EXPAND_ALL = "EXPAND_ALL",
/**
* Collapse all the accordions initially in data panel v2.
*/
COLLAPSE_ALL = "COLLAPSE_ALL",
/**
* Expand the first accordion and collapse the rest.
*/
EXPAND_FIRST = "EXPAND_FIRST"
}
/**
* The configuration attributes for the embedded search view.
* @group Embed components
*/
export interface SearchViewConfig extends SearchLiveboardCommonViewConfig, Omit<BaseViewConfig, 'primaryAction'> {
/**
* If set to true, the data sources panel is collapsed on load,
* but can be expanded manually.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* collapseDataSources:true,
* })
* ```
*/
collapseDataSources?: boolean;
/**
* If set to true, the data panel is collapsed on load,
* but can be expanded manually.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* collapseDataPanel:true,
* })
* ```
*/
collapseDataPanel?: boolean;
/**
* Show or hide the data sources panel.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.2.0 | ThoughtSpot: 9.1.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* hideDataSources:true,
* })
* ```
*/
hideDataSources?: boolean;
/**
* Show or hide the charts and tables in search answers.
* This attribute can be used to create a custom visualization
* using raw answer data.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.2.0 | ThoughtSpot: 9.1.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* hideResults:true,
* })
* ```
*/
hideResults?: boolean;
/**
* If set to true, the Search Assist feature is enabled.
*
* Supported embed types: `SearchEmbed`
* @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl, 8.8.1-sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* enableSearchAssist:true,
* })
* ```
*/
enableSearchAssist?: boolean;
/**
* If set to true, the tabular view is set as the default
* format for presenting search data.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* forceTable:true,
* })
*/
forceTable?: boolean;
/**
* The array of data source GUIDs to set on load.
* Only a single data source is supported currently.
* @deprecated Use `dataSource` instead.
*
* Supported embed types: `SearchEmbed`
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* dataSources:['id-234','id-456'],
* })
* ```
*/
dataSources?: string[];
/**
* The array of data source GUIDs to set on load.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.19.0
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* dataSource:'id-234',
* })
* ```
*/
dataSource?: string;
/**
* The initial search query to load the answer with.
* @deprecated
*
* Use {@link searchOptions} instead.
*/
searchQuery?: string;
/**
* Configuration for search options.
* Includes the following properties:
*
* `searchTokenString`: Search tokens to pass in the query.
*
* `executeSearch`: Boolean to define if the search should be executed or not.
* If it is executed, the focus is placed on the results.
* If it’s not executed, the focus is placed at the end of
* the token string in the search bar.
*
* Supported embed types: `SearchEmbed`
* @example
* ```js
* searchOptions: {
* searchTokenString: '[quantity purchased] [region]',
* executeSearch: true,
* }
* ```
*/
searchOptions?: SearchOptions;
/**
* Exclude the search token string from the URL.
* If set to true, the search token string is not appended to the URL.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.35.7 | ThoughtSpot: 10.8.0.cl
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* searchOptions: {
* searchTokenString: '[quantity purchased] [region]',
* executeSearch: true,
* },
* excludeSearchTokenStringFromURL: true,
* });
* ```
*/
excludeSearchTokenStringFromURL?: boolean;
/**
* The GUID of a saved answer to load initially.
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* answerId:'sed-1234',
* })
* ```
*/
answerId?: string;
/**
* If set to true, the search page will render without the Search Bar
* The chart/table should still be visible.
*
* Supported embed types: `SearchEmbed`
* @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* hideSearchBar:true,
* })
* ```
*/
hideSearchBar?: boolean;
/**
* Flag to set if last selected dataSource should be used
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.24.0
*/
useLastSelectedSources?: boolean;
/**
* To set the initial state of the search bar in case of saved-answers.
* @default false
* @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl
* @deprecated Use {@link collapseSearchBar} instead
*/
collapseSearchBarInitially?: boolean;
/**
* Flag to enable onBeforeSearchExecute Embed Event
*
* Supported embed types: `SearchEmbed`
* @version: SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl
*/
isOnBeforeGetVizDataInterceptEnabled?: boolean;
/**
* This controls the initial behaviour of custom column groups accordion.
* It takes DataPanelCustomColumnGroupsAccordionState enum values as input.
* List of different enum values:-
* - EXPAND_ALL: Expand all the accordion initially in data panel v2.
* - COLLAPSE_ALL: Collapse all the accordions initially in data panel v2.
* - EXPAND_FIRST: Expand the first accordion and collapse the rest.
*
* Supported embed types: `SearchEmbed`
* @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl
* @default DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* dataPanelCustomGroupsAccordionInitialState:
* DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL,
* });
* ```
*/
dataPanelCustomGroupsAccordionInitialState?: DataPanelCustomColumnGroupsAccordionState;
/**
* Flag to remove focus from search bar initially when user
* lands on search embed page.
*
* Supported embed types: `SearchEmbed`
* @version SDK: 1.32.0 | ThoughtSpot: 10.3.0.cl
* @default true
* @example
* ```js
* const embed = new SearchEmbed('#tsEmbed', {
* ... // other embed view config
* focusSearchBarOnRender: false,
* });
* ```
*/
focusSearchBarOnRender?: boolean;
}
export declare const HiddenActionItemByDefaultForSearchEmbed: Action[];
export interface SearchAppInitData extends DefaultAppInitData {
searchOptions?: SearchOptions;
}
/**
* Embed ThoughtSpot search
* @group Embed components
*/
export declare class SearchEmbed extends TsEmbed {
/**
* The view configuration for the embedded ThoughtSpot search.
*/
protected viewConfig: SearchViewConfig;
constructor(domSelector: DOMSelector, viewConfig: SearchViewConfig);
protected getSearchInitData(): {
searchOptions?: {
searchTokenString: string;
};
};
protected getAppInitData(): Promise<SearchAppInitData>;
protected getEmbedParams(): string;
/**
* Construct the URL of the embedded ThoughtSpot search to be
* loaded in the iframe
* @param answerId The GUID of a saved answer
* @param dataSources A list of data source GUIDs
*/
getIFrameSrc(): string;
/**
* Render the embedded ThoughtSpot search
*/
render(): Promise<SearchEmbed>;
}
/**
* Copyright (c) 2022
*
* Full application embedding
* https://developers.thoughtspot.com/docs/?pageid=full-embed
* @summary Full app embed
* @module
* @author Ayon Ghosh <ayon.ghosh@thoughtspot.com>
*/
/**
* Pages within the ThoughtSpot app that can be embedded.
*/
export declare enum Page {
/**
* Home page
*/
Home = "home",
/**
* Search page
*/
Search = "search",
/**
* Saved answers listing page
*/
Answers = "answers",
/**
* Liveboards listing page
*/
Liveboards = "liveboards",
/**
* @hidden
*/
Pinboards = "pinboards",
/**
* Data management page
*/
Data = "data",
/**
* SpotIQ listing page
*/
SpotIQ = "insights",
/**
* Monitor Alerts Page
*/
Monitor = "monitor"
}
/**
* Define the initial state os column custom group accordions
* in data panel v2.
*/
export declare enum DataPanelCustomColumnGroupsAccordionState {
/**
* Expand all the accordion initially in data panel v2.
*/
EXPAND_ALL = "EXPAND_ALL",
/**
* Collapse all the accordions initially in data panel v2.
*/
COLLAPSE_ALL = "COLLAPSE_ALL",
/**
* Expand the first accordion and collapse the rest.
*/
EXPAND_FIRST = "EXPAND_FIRST"
}
export declare enum HomePageSearchBarMode {
OBJECT_SEARCH = "objectSearch",
AI_ANSWER = "aiAnswer",
NONE = "none"
}
/**
* Define the version of the primary navbar
* @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl
*/
export declare enum PrimaryNavbarVersion {
/**
* Sliding (v3) introduces a new left-side navigation hub featuring a tab switcher,
* along with updates to the top navigation bar.
* It serves as the foundational version of the PrimaryNavBar.
*/
Sliding = "v3"
}
/**
* Define the version of the home page
* @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl
*/
export declare enum HomePage {
/**
* Modular (v2) introduces the updated Modular Home Experience.
* It serves as the foundational version of the home page.
*/
Modular = "v2"
}
/**
* Define the version of the list page
* @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl
*/
export declare enum ListPage {
/**
* List (v2) is the traditional List Experience.
* It serves as the foundational version of the list page.
*/
List = "v2",
/**
* ListWithUXChanges (v3) introduces the new updated list page with UX changes.
*/
ListWithUXChanges = "v3"
}
/**
* Define the discovery experience
* @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl
*/
export interface DiscoveryExperience {
/**
* primaryNavbarVersion determines the version of the navigation version.
*/
primaryNavbarVersion?: PrimaryNavbarVersion;
/**
* homePage determines the version of the home page.
*/
homePage?: HomePage;
/**
* listPageVersion determines the version of the list page.
*/
listPageVersion?: ListPage;
}
/**
* The view configuration for full app embedding.
* @group Embed components
*/
export interface AppViewConfig extends AllEmbedViewConfig {
/**
* If true, the top navigation bar within the ThoughtSpot app
* is displayed. By default, the navigation bar is hidden.
* This flag also controls the homepage left navigation bar.
*
* Supported embed types: `AppEmbed`
* @default true
* @version SDK: 1.2.0 | ThoughtSpot: 8.4.0.cl
* @example
* ```js
* const embed = new AppEmbed('#tsEmbed', {
* ... // other embed view config
* showPrimaryNavbar:true,
* })
* ```
*/
showPrimaryNavbar?: boolean;
/**
* Control the visibility of the left navigation bar on the Homepage.
* If showPrimaryNavbar is true, that is, if the Global and Homepage
* nav-bars are visible, this flag will only hide the homepage left nav-bar.
* The showPrimaryNavbar flag takes precedence over the hideHomepageLeftNav.
*
* **Note**: This option does not apply to the classic homepage.
* To access the updated modular homepage, set
* `modularHomeExperience` to `true` (available as Early Access feature in 9.12.5.cl).
*
* Supported embed types: `AppEmbed`
* @default false
* @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl
* @example
* ```js
* const embed = new AppEmbed('#tsEmbed', {
* ... // other embed view config
* hideHomepageLeftNav : true,
* })
* ```
*/
hideHomepageLeftNav?: boolean;
/**
* Control the visibility of the help (?) and profile buttons on the
* Global nav-bar. By default, these buttons are visible on the nav-bar.
*
* Supported embed types: `AppEmbed`
* @default false
* @version SDK: 1.2.0 | ThoughtSpot: 8.4.0.cl
* @example
* ```js
* const embed = new AppEmbed('#tsEmbed', {
* ... // other embed view config
* disableProfileAndHelp: true,
* })
* ```
*/
disableProfileAndHelp?: boolean;
/**
* @version SDK: 1.36.3 | ThoughtSpot: 10.1.0.cl