Skip to content

Commit a268232

Browse files
authored
fix(datasets): prevent viewport overflow in dataset creation page (#36166)
1 parent 43e9e1e commit a268232

File tree

3 files changed

+72
-2
lines changed

3 files changed

+72
-2
lines changed

superset-frontend/src/features/datasets/AddDataset/DatasetPanel/DatasetPanel.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ const DatasetPanel = ({
331331
}
332332
title={tableName || ''}
333333
>
334-
<Icons.InsertRowAboveOutlined />
334+
<Icons.InsertRowAboveOutlined iconSize="xxl" />
335335
{tableName}
336336
</StyledHeader>
337337
</>

superset-frontend/src/features/datasets/DatasetLayout/DatasetLayout.test.tsx

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import DatasetLayout from 'src/features/datasets/DatasetLayout';
2121
import Header from 'src/features/datasets/AddDataset/Header';
2222
import LeftPanel from 'src/features/datasets/AddDataset/LeftPanel';
2323
import DatasetPanel from 'src/features/datasets/AddDataset/DatasetPanel';
24+
import DatasetPanelComponent from 'src/features/datasets/AddDataset/DatasetPanel/DatasetPanel';
2425
import RightPanel from 'src/features/datasets/AddDataset/RightPanel';
2526
import Footer from 'src/features/datasets/AddDataset/Footer';
2627

@@ -90,4 +91,72 @@ describe('DatasetLayout', () => {
9091

9192
expect(screen.getByText(/Cancel/i)).toBeVisible();
9293
});
94+
95+
test('layout has proper flex constraints to prevent viewport overflow', () => {
96+
const { container } = render(
97+
<DatasetLayout
98+
leftPanel={<LeftPanel setDataset={() => null} />}
99+
datasetPanel={<DatasetPanel />}
100+
footer={<Footer url="" />}
101+
/>,
102+
{
103+
useRedux: true,
104+
useRouter: true,
105+
},
106+
);
107+
108+
// Find the wrapper
109+
const layoutWrapper = container.querySelector(
110+
'[data-test="dataset-layout-wrapper"]',
111+
);
112+
expect(layoutWrapper).toBeInTheDocument();
113+
114+
const outerRow = layoutWrapper?.firstElementChild as HTMLElement;
115+
expect(outerRow).toBeInTheDocument();
116+
117+
if (outerRow) {
118+
const styles = window.getComputedStyle(outerRow);
119+
// Verify the critical flex properties that prevent viewport overflow
120+
expect(styles.flexGrow).toBe('1');
121+
expect(styles.minHeight).toBe('0');
122+
expect(styles.display).toBe('flex');
123+
expect(styles.flexDirection).toBe('row');
124+
}
125+
});
126+
127+
test('layout maintains viewport constraints with large content', () => {
128+
const manyColumns = Array.from({ length: 100 }, (_, i) => ({
129+
name: `column_${i}`,
130+
type: 'VARCHAR',
131+
}));
132+
133+
const { container } = render(
134+
<DatasetLayout
135+
header={<Header setDataset={() => null} />}
136+
leftPanel={<LeftPanel setDataset={() => null} />}
137+
datasetPanel={
138+
<DatasetPanelComponent
139+
tableName="large_table"
140+
columnList={manyColumns}
141+
hasError={false}
142+
loading={false}
143+
/>
144+
}
145+
footer={<Footer url="" />}
146+
/>,
147+
{
148+
useRedux: true,
149+
useRouter: true,
150+
},
151+
);
152+
153+
const layoutWrapper = container.querySelector(
154+
'[data-test="dataset-layout-wrapper"]',
155+
);
156+
expect(layoutWrapper).toBeInTheDocument();
157+
158+
// Verify footer is always present in DOM (should be visible)
159+
const footer = screen.getByText(/Cancel/i);
160+
expect(footer).toBeInTheDocument();
161+
});
93162
});

superset-frontend/src/features/datasets/styles.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ const Row = styled.div`
4646
`;
4747

4848
export const OuterRow = styled(Row)`
49-
flex: 1 0 auto;
49+
flex: 1 0 0;
50+
min-height: 0;
5051
position: relative;
5152
`;
5253

0 commit comments

Comments
 (0)