diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.test.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.test.tsx
index eac5d13df7cf..91104ba7502e 100644
--- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.test.tsx
+++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.test.tsx
@@ -485,6 +485,89 @@ describe('DeckMulti Component Rendering', () => {
});
});
+ it('should include dashboardId in child slice requests when present', async () => {
+ const props = {
+ ...baseMockProps,
+ formData: {
+ ...baseMockProps.formData,
+ dashboardId: 123, // Simulate embedded dashboard context
+ },
+ };
+
+ renderWithProviders();
+
+ // Wait for child slice requests
+ await waitFor(() => {
+ expect(SupersetClient.get).toHaveBeenCalled();
+ });
+
+ // Check that all requests include the dashboardId
+ const calls = (SupersetClient.get as jest.Mock).mock.calls;
+ calls.forEach(call => {
+ const url = call[0].endpoint;
+ const urlParams = new URLSearchParams(url.split('?')[1]);
+ const formDataString = urlParams.get('form_data');
+ const formData = JSON.parse(formDataString || '{}');
+ expect(formData.dashboardId).toBe(123);
+ });
+ });
+
+ it('should not include dashboardId when not present', async () => {
+ const props = {
+ ...baseMockProps,
+ formData: {
+ ...baseMockProps.formData,
+ // No dashboardId
+ },
+ };
+
+ renderWithProviders();
+
+ // Wait for child slice requests
+ await waitFor(() => {
+ expect(SupersetClient.get).toHaveBeenCalled();
+ });
+
+ // Check that requests don't include dashboardId
+ const calls = (SupersetClient.get as jest.Mock).mock.calls;
+ calls.forEach(call => {
+ const url = call[0].endpoint;
+ const formData = JSON.parse(
+ new URLSearchParams(url.split('?')[1]).get('form_data') || '{}',
+ );
+ expect(formData.dashboardId).toBeUndefined();
+ });
+ });
+
+ it('should preserve dashboardId through filter updates', async () => {
+ const props = {
+ ...baseMockProps,
+ formData: {
+ ...baseMockProps.formData,
+ dashboardId: 456,
+ extra_filters: [{ col: 'test', op: 'IN' as const, val: ['value'] }],
+ },
+ };
+
+ renderWithProviders();
+
+ // Wait for child slice requests
+ await waitFor(() => {
+ expect(SupersetClient.get).toHaveBeenCalled();
+ });
+
+ // Verify dashboardId is preserved with filters
+ const calls = (SupersetClient.get as jest.Mock).mock.calls;
+ calls.forEach(call => {
+ const url = call[0].endpoint;
+ const formData = JSON.parse(
+ new URLSearchParams(url.split('?')[1]).get('form_data') || '{}',
+ );
+ expect(formData.dashboardId).toBe(456);
+ expect(formData.extra_filters).toBeDefined();
+ });
+ });
+
it('should handle viewport changes', async () => {
const { rerender } = renderWithProviders();
diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx
index 1ee7ee12707b..0fdc53f2b975 100644
--- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx
+++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx
@@ -287,6 +287,8 @@ const DeckMulti = (props: DeckMultiProps) => {
...subslice.form_data,
extra_filters: extraFilters,
adhoc_filters: adhocFilters,
+ // Preserve dashboard context for embedded mode permissions
+ ...(formData.dashboardId && { dashboardId: formData.dashboardId }),
},
} as any as JsonObject & { slice_id: number };