Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[@mantine/core] Spoiler: Fix Spoiler inside Accordion #2037

Merged
merged 25 commits into from Aug 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
846e180
[@mantine/core] Select: only use open/close callback when value changes
wes337 Feb 19, 2022
9e8045f
[@mantine/core] Select: do not use early return
wes337 Feb 19, 2022
8f446fa
Merge remote-tracking branch 'upstream/master'
wes337 Feb 19, 2022
40ea5cd
Merge remote-tracking branch 'upstream/master'
wes337 Feb 23, 2022
e1c76d0
Merge remote-tracking branch 'upstream/master'
wes337 Feb 26, 2022
52f4349
Merge remote-tracking branch 'upstream/master'
wes337 Mar 6, 2022
a74533c
Merge remote-tracking branch 'upstream/master'
wes337 Mar 10, 2022
75852b2
Merge remote-tracking branch 'upstream/master'
wes337 Mar 26, 2022
bc2b0db
Merge remote-tracking branch 'upstream/master'
wes337 Mar 27, 2022
a3c4287
Merge remote-tracking branch 'upstream/master'
wes337 Apr 3, 2022
4afe44a
Merge remote-tracking branch 'upstream/master'
wes337 Apr 19, 2022
6ac338e
Merge remote-tracking branch 'upstream/master'
wes337 May 7, 2022
3c04aba
Merge remote-tracking branch 'upstream/master'
wes337 May 9, 2022
75c8f60
Merge remote-tracking branch 'upstream/master'
wes337 May 10, 2022
7ce8791
Merge remote-tracking branch 'upstream/master'
wes337 May 25, 2022
d96a3a6
Merge remote-tracking branch 'upstream/master'
wes337 May 30, 2022
936dbb3
Merge remote-tracking branch 'upstream/master'
wes337 Jun 11, 2022
a53a6e2
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
b4b3751
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
1053827
Merge remote-tracking branch 'upstream/master'
wes337 Jun 12, 2022
3ad1b2a
Merge remote-tracking branch 'upstream/master'
wes337 Jun 20, 2022
8e439e1
Merge remote-tracking branch 'upstream/master'
wes337 Jun 30, 2022
f576e77
Merge remote-tracking branch 'upstream/master'
wes337 Aug 7, 2022
f741331
[@mantine/core] Spoiler: useElementSize hook to calculate height
wes337 Aug 7, 2022
e0b9071
[@mantine/core] Spoiler: improve story
wes337 Aug 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 24 additions & 0 deletions src/mantine-core/src/Spoiler/Spoiler.story.tsx
@@ -1,4 +1,5 @@
import React, { useState } from 'react';
import { Accordion } from '../Accordion/Accordion';
import { Spoiler } from './Spoiler';

export default { title: 'Spoiler' };
Expand Down Expand Up @@ -27,3 +28,26 @@ export function ContentChanges() {
</div>
);
}

export function InsideAccordion() {
return (
<div style={{ padding: 40 }}>
<Accordion>
<Accordion.Item value="first">
<Accordion.Control>Expand me</Accordion.Control>
<Accordion.Panel>
<Spoiler showLabel="Show" hideLabel="Hide" maxHeight={50}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut quam vitae
lorem viverra ultricies. Integer hendrerit, quam mollis tempus iaculis, tellus est
pellentesque eros, vel molestie risus eros sit amet sem. Fusce pretium ex quis neque
fringilla facilisis. Aenean sed luctus tortor, eget suscipit neque. Pellentesque
consequat neque quis porta luctus. Donec vitae est id velit condimentum mollis id vel
est. Sed eleifend interdum enim, a facilisis ex faucibus nec. Morbi vel est et mauris
congue ullamcorper. Duis eget velit lacinia, consequat neque vel, dignissim massa.
</Spoiler>
</Accordion.Panel>
</Accordion.Item>
</Accordion>
</div>
);
}
15 changes: 6 additions & 9 deletions src/mantine-core/src/Spoiler/Spoiler.tsx
@@ -1,5 +1,6 @@
import React, { useRef, useState, useEffect, forwardRef } from 'react';
import React, { useState, useEffect, forwardRef } from 'react';
import { DefaultProps, Selectors, useComponentDefaultProps } from '@mantine/styles';
import { useElementSize } from '@mantine/hooks';
import { Anchor } from '../Anchor';
import { Box } from '../Box';
import useStyles, { SpoilerStylesParams } from './Spoiler.styles';
Expand Down Expand Up @@ -57,24 +58,20 @@ export const Spoiler = forwardRef<HTMLDivElement, SpoilerProps>((props, ref) =>

const [show, setShowState] = useState(initialState);
const [spoiler, setSpoilerState] = useState(initialState);
const [contentHeight, setContentHeight] = useState<number>(null);
const contentRef = useRef<HTMLDivElement>(null);
const { ref: contentRef, height } = useElementSize();

const spoilerMoreContent = show ? hideLabel : showLabel;

useEffect(() => {
if (contentRef.current) {
setSpoilerState(maxHeight < contentRef.current.offsetHeight);
setContentHeight(contentRef.current.offsetHeight);
}
}, [maxHeight, children]);
setSpoilerState(maxHeight < height);
}, [height, maxHeight, children]);

return (
<Box className={cx(classes.root, className)} ref={ref} {...others}>
<div
className={classes.content}
style={{
maxHeight: !show ? maxHeight : contentHeight || undefined,
maxHeight: !show ? maxHeight : height || undefined,
}}
>
<div ref={contentRef}>{children}</div>
Expand Down