Skip to content

Commit 0a545df

Browse files
committed
wip
1 parent 09af98c commit 0a545df

File tree

2 files changed

+93
-8
lines changed

2 files changed

+93
-8
lines changed

packages/main/src/components/SplitterLayout/SplitterLayout.cy.tsx

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useState } from 'react';
2-
import type { SplitterLayoutPropTypes } from '../..';
2+
import { FlexBox, SplitterLayoutPropTypes, Text } from '../..';
33
import { Button, Label, SplitterElement, SplitterLayout } from '../..';
44
import { cypressPassThroughTestsFactory } from '@/cypress/support/utils';
55

@@ -107,7 +107,7 @@ describe('SplitterLayout', () => {
107107
);
108108
cy.findByTestId('btn').click();
109109
cy.get('[role="separator"]').first().click();
110-
// fallback click to prevent fuzzyness
110+
// fallback click to prevent flakyness
111111
cy.get('[role="separator"]')
112112
.first()
113113
.click()
@@ -129,5 +129,75 @@ describe('SplitterLayout', () => {
129129
cy.findByTestId('sl').should('not.be.visible').should('exist');
130130
});
131131

132+
[true, false].forEach((vertical) => {
133+
it.only(`controlled width (${vertical ? 'vertical' : 'horizontal'})`, () => {
134+
const resize = cy.spy().as('resize');
135+
const TestComp = () => {
136+
const [size0, setSize0] = useState('200px');
137+
const [size1, setSize1] = useState('200px');
138+
const [size2, setSize2] = useState('200px');
139+
const [size3, setSize3] = useState('200px');
140+
const setter = [setSize0, setSize1, setSize2, setSize3];
141+
return (
142+
<>
143+
<SplitterLayout
144+
vertical={vertical}
145+
style={{ height: '600px' }}
146+
onResize={(e) => {
147+
resize(e);
148+
e.areas.forEach((item) => {
149+
setter[Number(item.area.dataset.index)](item.size + 'px');
150+
});
151+
}}
152+
>
153+
<SplitterElement size={size0} data-index={0}>
154+
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
155+
<Text>Content 1</Text>
156+
</FlexBox>
157+
</SplitterElement>
158+
<SplitterElement size={size1} data-index={1}>
159+
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
160+
<Text style={{ whiteSpace: 'pre-line' }}>{`Content 2
161+
with
162+
multi
163+
lines
164+
`}</Text>
165+
</FlexBox>
166+
</SplitterElement>
167+
<SplitterElement size={'auto'} data-index={2}>
168+
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
169+
<Text>
170+
Content 3 with long text: Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
171+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
172+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est
173+
Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
174+
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et
175+
accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est
176+
Lorem ipsum dolor sit amet."
177+
</Text>
178+
</FlexBox>
179+
</SplitterElement>
180+
<SplitterElement data-index={3} size={size3}>
181+
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
182+
<Text>Content 4</Text>
183+
</FlexBox>
184+
</SplitterElement>
185+
</SplitterLayout>
186+
</>
187+
);
188+
};
189+
190+
cy.mount(<TestComp />);
191+
192+
cy.get('[data-index="0"]').as('se0');
193+
cy.get('[data-index="1"]').as('se1');
194+
cy.get('[data-index="2"]').as('se2');
195+
cy.get('[data-index="3"]').as('se3');
196+
cy.findAllByRole('separator').each(($splitter, index) => {
197+
cy.wrap($splitter).as(`splitter${index}`);
198+
});
199+
});
200+
});
201+
132202
cypressPassThroughTestsFactory(SplitterLayout, { children: <SplitterElement>Content</SplitterElement> });
133203
});

packages/main/src/components/SplitterLayout/SplitterLayout.stories.tsx

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,29 @@ export const Default: Story = {
3030
},
3131
},
3232
render(args) {
33+
const [size0, setSize0] = useState('200px');
34+
const [size1, setSize1] = useState('200px');
35+
const [size2, setSize2] = useState('200px');
36+
const [size3, setSize3] = useState('200px');
37+
const setter = [setSize0, setSize1, setSize2, setSize3];
3338
return (
34-
<SplitterLayout {...args}>
35-
<SplitterElement>
39+
<SplitterLayout
40+
{...args}
41+
onResize={(e) => {
42+
e.areas.forEach((item) => {
43+
console.log('Area', item.area.dataset.index, 'resized:', item.size + 'px');
44+
setter[Number(item.area.dataset.index)](item.size + 'px');
45+
});
46+
// setSize0(e.areas[0].size + 'px');
47+
// setSize1(e.areas[1].size + 'px');
48+
}}
49+
>
50+
<SplitterElement size={size0} data-index={0}>
3651
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
3752
<Text>Content 1</Text>
3853
</FlexBox>
3954
</SplitterElement>
40-
<SplitterElement>
55+
<SplitterElement size={size1} data-index={1}>
4156
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
4257
<Text style={{ whiteSpace: 'pre-line' }}>{`Content 2
4358
with
@@ -46,7 +61,7 @@ export const Default: Story = {
4661
`}</Text>
4762
</FlexBox>
4863
</SplitterElement>
49-
<SplitterElement>
64+
<SplitterElement size={'auto'} data-index={2}>
5065
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
5166
<Text>
5267
Content 3 with long text: Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
@@ -58,7 +73,7 @@ export const Default: Story = {
5873
</Text>
5974
</FlexBox>
6075
</SplitterElement>
61-
<SplitterElement>
76+
<SplitterElement data-index={3} size={size3}>
6277
<FlexBox style={{ height: '100%', width: '100%' }} alignItems="Center" justifyContent="Center">
6378
<Text>Content 4</Text>
6479
</FlexBox>
@@ -106,7 +121,7 @@ export const Nested: Story = {
106121
render(args) {
107122
const [vertical, setVertical] = useState(args.vertical);
108123
const handleChange = (e) => {
109-
setVertical(e.detail.selectedItem.textContent === 'Vertical');
124+
setVertical(e.detail.selectedItems[0].textContent === 'Vertical');
110125
};
111126
useEffect(() => {
112127
setVertical(args.vertical);

0 commit comments

Comments
 (0)