Skip to content

Commit a841066

Browse files
authored
[bugfix] Support Panel defaultSize={0} (#600)
1 parent 97fba07 commit a841066

File tree

3 files changed

+27
-11
lines changed

3 files changed

+27
-11
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 4.4.1
4+
5+
- [600](https://github.com/bvaughn/react-resizable-panels/pull/600): Bugfix: Collapsible `Panel` should treat `defaultSize={0}` as _collapsed_ on mount
6+
37
## 4.4.0
48

59
- [599](https://github.com/bvaughn/react-resizable-panels/pull/599): Add new `onLayoutChanged` prop to `Group`.

integrations/tests/tests/default-sizes.spec.tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@ test.describe("default panel sizes", () => {
1212
<Group>
1313
<Panel defaultSize="30%" id="left" minSize={50} />
1414
<Separator />
15+
<Panel collapsible defaultSize="0%" id="middle" minSize={50} />
16+
<Separator />
1517
<Panel id="right" minSize={50} />
1618
</Group>,
1719
{ usePopUpWindow }
1820
);
1921

2022
await expect(page.getByText("id: left")).toContainText("30%");
21-
await expect(page.getByRole("separator")).toBeVisible();
23+
await expect(page.getByText("id: middle")).toContainText("0%");
2224
await expect(page.getByText("id: right")).toContainText("70%");
25+
await expect(page.getByRole("separator")).toHaveCount(2);
2326
});
2427

2528
test("pixels", async ({ page: mainPage }) => {
@@ -28,14 +31,17 @@ test.describe("default panel sizes", () => {
2831
<Group>
2932
<Panel defaultSize={200} id="left" minSize={50} />
3033
<Separator />
34+
<Panel collapsible defaultSize={0} id="middle" minSize={50} />
35+
<Separator />
3136
<Panel id="right" minSize={50} />
3237
</Group>,
3338
{ usePopUpWindow }
3439
);
3540

3641
await expect(page.getByText("id: left")).toContainText("200px");
37-
await expect(page.getByRole("separator")).toBeVisible();
38-
await expect(page.getByText("id: right")).toContainText("776px");
42+
await expect(page.getByText("id: middle")).toContainText("0px");
43+
await expect(page.getByText("id: right")).toContainText("752px");
44+
await expect(page.getByRole("separator")).toHaveCount(2);
3945
});
4046

4147
test("rems", async ({ page: mainPage }) => {
@@ -44,14 +50,17 @@ test.describe("default panel sizes", () => {
4450
<Group>
4551
<Panel defaultSize="10rem" id="left" minSize={50} />
4652
<Separator />
53+
<Panel collapsible defaultSize="0rem" id="middle" minSize={50} />
54+
<Separator />
4755
<Panel id="right" minSize={50} />
4856
</Group>,
4957
{ usePopUpWindow }
5058
);
5159

5260
await expect(page.getByText("id: left")).toContainText("160px");
53-
await expect(page.getByRole("separator")).toBeVisible();
54-
await expect(page.getByText("id: right")).toContainText("816px");
61+
await expect(page.getByText("id: middle")).toContainText("0px");
62+
await expect(page.getByText("id: right")).toContainText("792px");
63+
await expect(page.getByRole("separator")).toHaveCount(2);
5564
});
5665

5766
test("vw", async ({ page: mainPage }) => {
@@ -60,14 +69,17 @@ test.describe("default panel sizes", () => {
6069
<Group>
6170
<Panel defaultSize="25vw" id="left" minSize={50} />
6271
<Separator />
72+
<Panel collapsible defaultSize="0vw" id="middle" minSize={50} />
73+
<Separator />
6374
<Panel id="right" minSize={50} />
6475
</Group>,
6576
{ usePopUpWindow }
6677
);
6778

6879
await expect(page.getByText("id: left")).toContainText("250px");
69-
await expect(page.getByRole("separator")).toBeVisible();
70-
await expect(page.getByText("id: right")).toContainText("726px");
80+
await expect(page.getByText("id: middle")).toContainText("0px");
81+
await expect(page.getByText("id: right")).toContainText("702px");
82+
await expect(page.getByRole("separator")).toHaveCount(2);
7183
});
7284
});
7385
}

lib/global/dom/calculatePanelConstraints.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export function calculatePanelConstraints(group: RegisteredGroup) {
2525
const { element, panelConstraints } = panel;
2626

2727
let collapsedSize = 0;
28-
if (panelConstraints.collapsedSize) {
28+
if (panelConstraints.collapsedSize !== undefined) {
2929
const pixels = sizeStyleToPixels({
3030
groupSize,
3131
panelElement: element,
@@ -36,7 +36,7 @@ export function calculatePanelConstraints(group: RegisteredGroup) {
3636
}
3737

3838
let defaultSize: number | undefined = undefined;
39-
if (panelConstraints.defaultSize) {
39+
if (panelConstraints.defaultSize !== undefined) {
4040
const pixels = sizeStyleToPixels({
4141
groupSize,
4242
panelElement: element,
@@ -47,7 +47,7 @@ export function calculatePanelConstraints(group: RegisteredGroup) {
4747
}
4848

4949
let minSize = 0;
50-
if (panelConstraints.minSize) {
50+
if (panelConstraints.minSize !== undefined) {
5151
const pixels = sizeStyleToPixels({
5252
groupSize,
5353
panelElement: element,
@@ -58,7 +58,7 @@ export function calculatePanelConstraints(group: RegisteredGroup) {
5858
}
5959

6060
let maxSize = 100;
61-
if (panelConstraints.maxSize) {
61+
if (panelConstraints.maxSize !== undefined) {
6262
const pixels = sizeStyleToPixels({
6363
groupSize,
6464
panelElement: element,

0 commit comments

Comments
 (0)