Advertisement
Guest User

Untitled

a guest
Nov 18th, 2024
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.32 KB | None | 0 0
  1. import type { AuthEventEmitter } from '@thoughtspot/visual-embed-sdk';
  2. import { AuthType, AuthStatus, init, EmbedEvent, Page } from '@thoughtspot/visual-embed-sdk';
  3. import { AppEmbed } from '@thoughtspot/visual-embed-sdk/lib/src/react';
  4. import classes from './thoughtspot-app.module.css';
  5. import { useGetSdkToken } from '@/api/generated/endpoints/dashboard';
  6. import { useEffect } from 'react';
  7. import { useStore } from '@/store';
  8.  
  9. interface ThoughtSpotAppProps {
  10. appType: string;
  11. }
  12.  
  13. export default function ThoughtSpotApp({ appType }: ThoughtSpotAppProps): JSX.Element {
  14. const { thoughtSpotSlice } = useStore();
  15. const { initialized, token, setInitialized, setToken, clearToken } = thoughtSpotSlice;
  16. const { mutateAsync: getSdkToken, data, isError, isPending } = useGetSdkToken();
  17. const username = '230165';
  18.  
  19. const tsInitialize = () => {
  20. const thoughtSpotEventEmitter: AuthEventEmitter = init({
  21. thoughtSpotHost: import.meta.env.VITE_THOUGHTSPOT_URL,
  22. authType: AuthType.TrustedAuthTokenCookieless,
  23. getAuthToken: async () => {
  24. if (data?.sdkToken && data.sdkToken !== '') {
  25. return data.sdkToken;
  26. }
  27. try{
  28. await getSdkToken({data: {username}});
  29.  
  30. if(!data?.sdkToken || data?.sdkToken === ''){
  31. return '';
  32. }
  33.  
  34. return data.sdkToken;
  35. }
  36. catch (error) {
  37. return '';
  38. }
  39. },
  40. callPrefetch: true,
  41. disableTokenVerification: true,
  42. autoLogin: false,
  43. username: username,
  44. });
  45.  
  46. thoughtSpotEventEmitter.on(AuthStatus.SUCCESS, () => {
  47. if(data?.sdkToken){
  48. setToken(data.sdkToken);
  49. }
  50. })
  51. .on(AuthStatus.SDK_SUCCESS, () => {
  52. setInitialized(true);
  53. })
  54. .on(AuthStatus.FAILURE, (reason) => {
  55. clearToken();
  56. // eslint-disable-next-line no-console -- We need to log the EmbedEvent.Load for debugging purposes
  57. console.error('Failed to authenticate with ThoughtSpot', reason);
  58. })
  59. .on(AuthStatus.LOGOUT, () => {
  60. clearToken();
  61. setInitialized(false);
  62. });
  63. };
  64.  
  65. useEffect(() => {
  66. console.log('TS URL', import.meta.env.VITE_THOUGHTSPOT_URL);
  67. if(data?.sdkToken && data.sdkToken !== ''){
  68. setToken(data.sdkToken);
  69. }
  70. }, [data, setToken]);
  71.  
  72. const onLoad = (): void => {
  73. // eslint-disable-next-line no-console -- We need to log the EmbedEvent.Load for debugging purposes
  74. console.log(EmbedEvent.Load, {});
  75. };
  76.  
  77. let pageToLoad = Page.Home;
  78. if (appType === 'overview') {
  79. pageToLoad = Page.Home;
  80. } else if (appType === 'dashboards') {
  81. pageToLoad = Page.Liveboards;
  82. } else if (appType === 'answers') {
  83. pageToLoad = Page.Answers;
  84. } else if (appType === 'monitor') {
  85. pageToLoad = Page.Monitor;
  86. } else if (appType === 'data') {
  87. pageToLoad = Page.Data;
  88. }
  89.  
  90. if(isPending){
  91. return <div>Loading...</div>;
  92. }
  93.  
  94. if(isError){
  95. return <div>Failed to load ThoughtSpot</div>;
  96. }
  97.  
  98. return (
  99. <div className={classes['thoughtspot-app']}>
  100. {appType === 'pulse' ? (
  101. 'Pulse'
  102. ) : (
  103.  
  104. <AppEmbed
  105. frameParams={{
  106. height: 600,
  107. }}
  108. onLoad={onLoad}
  109. pageId={pageToLoad}
  110. />
  111. )}
  112. </div>
  113. );
  114. }
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement