@thoughtspot/visual-embed-sdk 1.50.0 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/css-variables.d.ts +95 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +136 -15
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +59 -37
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +419 -149
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +230 -1
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +30 -16
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +221 -17
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/events.spec.js +635 -0
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/host-events.spec.js +151 -0
- package/cjs/src/embed/host-events.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.d.ts +51 -14
- package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/contracts.js +11 -1
- package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts +1 -0
- package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.js +9 -0
- package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js +218 -0
- package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.d.ts +2 -0
- package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.js +32 -2
- package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
- package/cjs/src/embed/hostEventClient/utils.spec.js +178 -0
- package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +42 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +26 -6
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +83 -2
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +8 -1
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +14 -1
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-utils.spec.js +61 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +34 -0
- package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.spec.js +17 -0
- package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +29 -7
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +146 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/errors.d.ts +1 -0
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +1 -0
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -2
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts +4 -0
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +4 -0
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/react/util.spec.js +251 -0
- package/cjs/src/react/util.spec.js.map +1 -1
- package/cjs/src/types.d.ts +573 -11
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +519 -2
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/processData.spec.js +93 -0
- package/cjs/src/utils/processData.spec.js.map +1 -1
- package/cjs/src/utils/processTrigger.spec.js +61 -0
- package/cjs/src/utils/processTrigger.spec.js.map +1 -1
- package/dist/{index-B5xoN6Cp.js → index-aBzH5ZwF.js} +1 -1
- package/dist/src/css-variables.d.ts +95 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +136 -15
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +230 -1
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/contracts.d.ts +51 -14
- package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/host-event-client.d.ts +1 -0
- package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/dist/src/embed/hostEventClient/utils.d.ts +2 -0
- package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +42 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +8 -1
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +34 -0
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts +4 -0
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/types.d.ts +573 -11
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +936 -142
- package/dist/tsembed-react.js +935 -141
- package/dist/tsembed.es.js +935 -142
- package/dist/tsembed.js +933 -140
- package/dist/visual-embed-sdk-react-full.d.ts +1147 -44
- package/dist/visual-embed-sdk-react.d.ts +1153 -46
- package/dist/visual-embed-sdk.d.ts +1161 -46
- package/lib/package.json +1 -1
- package/lib/src/css-variables.d.ts +95 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +136 -15
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +60 -38
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +420 -150
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +230 -1
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +31 -17
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +222 -18
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +635 -0
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/host-events.spec.js +152 -1
- package/lib/src/embed/host-events.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.d.ts +51 -14
- package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/contracts.js +10 -0
- package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.d.ts +1 -0
- package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.js +10 -1
- package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
- package/lib/src/embed/hostEventClient/host-event-client.spec.js +218 -0
- package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.d.ts +2 -0
- package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
- package/lib/src/embed/hostEventClient/utils.js +28 -1
- package/lib/src/embed/hostEventClient/utils.js.map +1 -1
- package/lib/src/embed/hostEventClient/utils.spec.js +179 -1
- package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +42 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +26 -6
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +83 -2
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +8 -1
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +12 -0
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-utils.spec.js +62 -1
- package/lib/src/embed/spotter-utils.spec.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +34 -0
- package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-viz-utils.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.spec.js +17 -0
- package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +29 -7
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +146 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/errors.d.ts +1 -0
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +1 -0
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +2 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts +4 -0
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +4 -0
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/react/util.spec.js +251 -0
- package/lib/src/react/util.spec.js.map +1 -1
- package/lib/src/types.d.ts +573 -11
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +519 -2
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/processData.spec.js +93 -0
- package/lib/src/utils/processData.spec.js.map +1 -1
- package/lib/src/utils/processTrigger.spec.js +61 -0
- package/lib/src/utils/processTrigger.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +1161 -46
- package/package.json +1 -1
- package/src/css-variables.ts +118 -0
- package/src/embed/app.spec.ts +530 -183
- package/src/embed/app.ts +209 -66
- package/src/embed/conversation.spec.ts +275 -21
- package/src/embed/conversation.ts +262 -17
- package/src/embed/events.spec.ts +757 -1
- package/src/embed/host-events.spec.ts +194 -0
- package/src/embed/hostEventClient/contracts.ts +57 -14
- package/src/embed/hostEventClient/host-event-client.spec.ts +338 -0
- package/src/embed/hostEventClient/host-event-client.ts +16 -0
- package/src/embed/hostEventClient/utils.spec.ts +204 -0
- package/src/embed/hostEventClient/utils.ts +37 -10
- package/src/embed/liveboard.spec.ts +108 -2
- package/src/embed/liveboard.ts +82 -14
- package/src/embed/spotter-utils.spec.ts +68 -1
- package/src/embed/spotter-utils.ts +16 -1
- package/src/embed/spotter-viz-utils.spec.ts +17 -0
- package/src/embed/spotter-viz-utils.ts +34 -0
- package/src/embed/ts-embed.spec.ts +186 -0
- package/src/embed/ts-embed.ts +30 -4
- package/src/errors.ts +1 -0
- package/src/index.ts +3 -1
- package/src/mixpanel-service.ts +4 -0
- package/src/react/util.spec.tsx +255 -0
- package/src/types.ts +575 -8
- package/src/utils/processData.spec.ts +97 -0
- package/src/utils/processTrigger.spec.ts +91 -0
|
@@ -1174,6 +1174,32 @@ describe('Unit test case for ts embed', () => {
|
|
|
1174
1174
|
const { mockGetPreauthInfo } = await setup(true, 123);
|
|
1175
1175
|
expect(mockGetPreauthInfo).toHaveBeenCalledTimes(0);
|
|
1176
1176
|
});
|
|
1177
|
+
test('should NOT trigger InfoSuccess when getPreauthInfo resolves with no .info field', async () => {
|
|
1178
|
+
jest.spyOn(window, 'addEventListener').mockImplementationOnce((event, handler) => {
|
|
1179
|
+
handler({
|
|
1180
|
+
data: { type: 'xyz' },
|
|
1181
|
+
ports: [3000],
|
|
1182
|
+
source: null,
|
|
1183
|
+
});
|
|
1184
|
+
});
|
|
1185
|
+
mockProcessTrigger.mockResolvedValueOnce({ session: 'test' });
|
|
1186
|
+
jest.spyOn(authService, 'fetchPreauthInfoService').mockResolvedValueOnce({
|
|
1187
|
+
ok: true,
|
|
1188
|
+
headers: new Headers({ 'content-type': 'application/json' }),
|
|
1189
|
+
json: async () => ({}), // no .info field
|
|
1190
|
+
});
|
|
1191
|
+
const iFrame = document.createElement('div');
|
|
1192
|
+
jest.spyOn(baseInstance, 'getAuthPromise').mockResolvedValueOnce(true);
|
|
1193
|
+
const tsEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), {});
|
|
1194
|
+
iFrame.contentWindow = { postMessage: jest.fn() };
|
|
1195
|
+
jest.spyOn(iFrame, 'addEventListener').mockImplementationOnce((event, handler) => { handler({}); });
|
|
1196
|
+
jest.spyOn(document, 'createElement').mockReturnValueOnce(iFrame);
|
|
1197
|
+
await tsEmbed.render();
|
|
1198
|
+
await (0, test_utils_1.executeAfterWait)(() => {
|
|
1199
|
+
const infoSuccessCall = mockProcessTrigger.mock.calls.find((call) => call[1] === types_1.HostEvent.InfoSuccess);
|
|
1200
|
+
expect(infoSuccessCall).toBeUndefined();
|
|
1201
|
+
});
|
|
1202
|
+
});
|
|
1177
1203
|
});
|
|
1178
1204
|
describe('Preauth Cache for FullAppEmbed with PrimaryNavBar', () => {
|
|
1179
1205
|
beforeAll(() => {
|
|
@@ -1897,6 +1923,43 @@ describe('Unit test case for ts embed', () => {
|
|
|
1897
1923
|
orgId: overrideOrgId,
|
|
1898
1924
|
});
|
|
1899
1925
|
});
|
|
1926
|
+
it('Sets the overrideHistoryState param', async () => {
|
|
1927
|
+
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1928
|
+
frameParams: {
|
|
1929
|
+
width: '100%',
|
|
1930
|
+
height: '100%',
|
|
1931
|
+
},
|
|
1932
|
+
overrideHistoryState: true,
|
|
1933
|
+
});
|
|
1934
|
+
await appEmbed.render();
|
|
1935
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
1936
|
+
overrideHistoryState: true,
|
|
1937
|
+
});
|
|
1938
|
+
});
|
|
1939
|
+
it('Sets the overrideHistoryState param to false', async () => {
|
|
1940
|
+
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1941
|
+
frameParams: {
|
|
1942
|
+
width: '100%',
|
|
1943
|
+
height: '100%',
|
|
1944
|
+
},
|
|
1945
|
+
overrideHistoryState: false,
|
|
1946
|
+
});
|
|
1947
|
+
await appEmbed.render();
|
|
1948
|
+
(0, test_utils_1.expectUrlToHaveParamsWithValues)((0, test_utils_1.getIFrameSrc)(), {
|
|
1949
|
+
overrideHistoryState: false,
|
|
1950
|
+
});
|
|
1951
|
+
});
|
|
1952
|
+
it('Should not add overrideHistoryState param when it is undefined', async () => {
|
|
1953
|
+
const appEmbed = new index_1.AppEmbed((0, test_utils_1.getRootEl)(), {
|
|
1954
|
+
frameParams: {
|
|
1955
|
+
width: '100%',
|
|
1956
|
+
height: '100%',
|
|
1957
|
+
},
|
|
1958
|
+
});
|
|
1959
|
+
await appEmbed.render();
|
|
1960
|
+
const url = (0, test_utils_1.getIFrameSrc)();
|
|
1961
|
+
expect(url).not.toContain('overrideHistoryState');
|
|
1962
|
+
});
|
|
1900
1963
|
it('Should not add contextMenuEnabledOnWhichClick flag to the iframe src when it is not passed', async () => {
|
|
1901
1964
|
const liveboardEmbed = new index_1.LiveboardEmbed((0, test_utils_1.getRootEl)(), {
|
|
1902
1965
|
...defaultViewConfig,
|
|
@@ -3727,6 +3790,20 @@ describe('Trigger method edge cases', () => {
|
|
|
3727
3790
|
expect(result).toBeNull();
|
|
3728
3791
|
});
|
|
3729
3792
|
});
|
|
3793
|
+
test('isValidationError catch: handleError called with embedErrorDetails and error is rethrown', async () => {
|
|
3794
|
+
const searchEmbed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3795
|
+
const handleErrorSpy = jest.spyOn(searchEmbed, 'handleError').mockImplementation(() => { });
|
|
3796
|
+
await searchEmbed.render();
|
|
3797
|
+
// First processTrigger call is getAvailableUIPassthroughKeys for DrillDown
|
|
3798
|
+
mockProcessTrigger.mockResolvedValueOnce([
|
|
3799
|
+
{ value: { keys: Object.values(contracts_1.UIPassthroughEvent) } },
|
|
3800
|
+
]);
|
|
3801
|
+
// DrillDown with no points → throwDrillDownValidationError → isValidationError=true
|
|
3802
|
+
await expect(searchEmbed.trigger(types_1.HostEvent.DrillDown, {})).rejects.toThrow('DrillDown requires a valid points object');
|
|
3803
|
+
expect(handleErrorSpy).toHaveBeenCalledWith(expect.objectContaining({
|
|
3804
|
+
data: expect.objectContaining({ code: types_1.EmbedErrorCodes.HOST_EVENT_VALIDATION }),
|
|
3805
|
+
}));
|
|
3806
|
+
});
|
|
3730
3807
|
});
|
|
3731
3808
|
describe('PreRender replaceExistingPreRender scenarios', () => {
|
|
3732
3809
|
beforeAll(() => {
|
|
@@ -3735,6 +3812,9 @@ describe('PreRender replaceExistingPreRender scenarios', () => {
|
|
|
3735
3812
|
authType: index_1.AuthType.None,
|
|
3736
3813
|
});
|
|
3737
3814
|
});
|
|
3815
|
+
beforeEach(() => {
|
|
3816
|
+
document.body.innerHTML = (0, test_utils_1.getDocumentBody)();
|
|
3817
|
+
});
|
|
3738
3818
|
afterEach(() => {
|
|
3739
3819
|
const rootEle = document.getElementById('myRoot');
|
|
3740
3820
|
rootEle === null || rootEle === void 0 ? void 0 : rootEle.remove();
|
|
@@ -3842,6 +3922,40 @@ describe('Fullscreen change handler behavior', () => {
|
|
|
3842
3922
|
expect(mockProcessTrigger).not.toHaveBeenCalledWith(expect.any(Object), types_1.HostEvent.ExitPresentMode, expect.any(String), expect.any(Object));
|
|
3843
3923
|
});
|
|
3844
3924
|
});
|
|
3925
|
+
test('disableFullscreenPresentation undefined defaults to true — no fullscreenchange listener registered', () => {
|
|
3926
|
+
(0, index_1.init)({
|
|
3927
|
+
thoughtSpotHost: 'tshost',
|
|
3928
|
+
authType: index_1.AuthType.None,
|
|
3929
|
+
// disableFullscreenPresentation not set → defaults to true via ?? true
|
|
3930
|
+
});
|
|
3931
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3932
|
+
const addEventListenerSpy = jest.spyOn(document, 'addEventListener');
|
|
3933
|
+
embed['setupFullscreenChangeHandler']();
|
|
3934
|
+
expect(addEventListenerSpy).not.toHaveBeenCalledWith('fullscreenchange', expect.any(Function));
|
|
3935
|
+
addEventListenerSpy.mockRestore();
|
|
3936
|
+
// Restore for other tests in this describe
|
|
3937
|
+
(0, index_1.init)({ thoughtSpotHost: 'tshost', authType: index_1.AuthType.None, disableFullscreenPresentation: false });
|
|
3938
|
+
});
|
|
3939
|
+
test('fullscreenchange fires but iFrame.contentWindow is null — trigger NOT called, debug log emitted', () => {
|
|
3940
|
+
const embed = new index_1.SearchEmbed((0, test_utils_1.getRootEl)(), defaultViewConfig);
|
|
3941
|
+
// Give the embed a fake iFrame with null contentWindow
|
|
3942
|
+
embed.iFrame = { contentWindow: null };
|
|
3943
|
+
const addEventListenerSpy = jest.spyOn(document, 'addEventListener');
|
|
3944
|
+
const loggerDebugSpy = jest.spyOn(logger_1.logger, 'debug').mockImplementation(() => { });
|
|
3945
|
+
const triggerSpy = jest.spyOn(embed, 'trigger').mockImplementation(() => Promise.resolve(null));
|
|
3946
|
+
embed['setupFullscreenChangeHandler']();
|
|
3947
|
+
// Capture the registered handler directly instead of dispatching to document
|
|
3948
|
+
const fullscreenCall = addEventListenerSpy.mock.calls.find((c) => c[0] === 'fullscreenchange');
|
|
3949
|
+
expect(fullscreenCall).toBeTruthy();
|
|
3950
|
+
const handler = fullscreenCall[1];
|
|
3951
|
+
Object.defineProperty(document, 'fullscreenElement', { value: null, writable: true, configurable: true });
|
|
3952
|
+
handler(new Event('fullscreenchange'));
|
|
3953
|
+
expect(triggerSpy).not.toHaveBeenCalled();
|
|
3954
|
+
expect(loggerDebugSpy).toHaveBeenCalledWith(expect.stringContaining('Skipping ExitPresentMode'));
|
|
3955
|
+
addEventListenerSpy.mockRestore();
|
|
3956
|
+
loggerDebugSpy.mockRestore();
|
|
3957
|
+
triggerSpy.mockRestore();
|
|
3958
|
+
});
|
|
3845
3959
|
});
|
|
3846
3960
|
describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
3847
3961
|
const setupPreRenderTest = async (preRenderId, initialConfig) => {
|
|
@@ -4298,6 +4412,38 @@ describe('ShowPreRender with UpdateEmbedParams', () => {
|
|
|
4298
4412
|
expect(placeholderEle.parentElement).not.toBeNull();
|
|
4299
4413
|
embed.destroy();
|
|
4300
4414
|
});
|
|
4415
|
+
// showPreRender located the stale placeholder with a subtree-wide
|
|
4416
|
+
// querySelector but removed it with hostElement.removeChild(), which
|
|
4417
|
+
// only accepts direct children. With fullHeight the placeholder can be
|
|
4418
|
+
// nested deeper than a direct child, so removeChild threw
|
|
4419
|
+
// "NotFoundError: Failed to execute 'removeChild' on 'Node'".
|
|
4420
|
+
it('showPreRender removes a placeholder nested below a direct child without throwing', async () => {
|
|
4421
|
+
(0, test_utils_1.createRootEleForEmbed)();
|
|
4422
|
+
const embed = new index_1.LiveboardEmbed('#tsEmbedDiv', {
|
|
4423
|
+
preRenderId: 'ph-nested-test',
|
|
4424
|
+
liveboardId: 'lb-id',
|
|
4425
|
+
fullHeight: true,
|
|
4426
|
+
});
|
|
4427
|
+
await embed.preRender();
|
|
4428
|
+
await (0, test_utils_1.waitFor)(() => !!document.querySelector('#tsEmbed-pre-render-child-ph-nested-test'));
|
|
4429
|
+
const hostElement = document.querySelector('#tsEmbedDiv');
|
|
4430
|
+
const placeHolderId = 'tsEmbed-pre-render-placeholder-ph-nested-test';
|
|
4431
|
+
// Simulate the fullHeight layout where the placeholder ends up as
|
|
4432
|
+
// a grandchild of the host element rather than a direct child.
|
|
4433
|
+
const intermediateWrapper = document.createElement('div');
|
|
4434
|
+
const staleNestedPlaceholder = document.createElement('div');
|
|
4435
|
+
staleNestedPlaceholder.id = placeHolderId;
|
|
4436
|
+
intermediateWrapper.appendChild(staleNestedPlaceholder);
|
|
4437
|
+
hostElement.appendChild(intermediateWrapper);
|
|
4438
|
+
expect(hostElement.querySelector(`#${placeHolderId}`)).toBe(staleNestedPlaceholder);
|
|
4439
|
+
// Before the fix this threw NotFoundError.
|
|
4440
|
+
await expect(embed.showPreRender()).resolves.toBeDefined();
|
|
4441
|
+
// The stale nested placeholder is gone; the fresh one is a direct child.
|
|
4442
|
+
expect(staleNestedPlaceholder.isConnected).toBe(false);
|
|
4443
|
+
const currentPlaceholder = embed.getPreRenderPlaceHolderElement();
|
|
4444
|
+
expect(currentPlaceholder.parentElement).toBe(hostElement);
|
|
4445
|
+
embed.destroy();
|
|
4446
|
+
});
|
|
4301
4447
|
});
|
|
4302
4448
|
});
|
|
4303
4449
|
//# sourceMappingURL=ts-embed.spec.js.map
|