Skip to content

Commit 1313653

Browse files
committed
fix: add is mounted check
1 parent e374a10 commit 1313653

File tree

7 files changed

+30
-2
lines changed

7 files changed

+30
-2
lines changed

src/components/codeKeywords/animatedContainer.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use client';
2+
13
import {motion, MotionProps} from 'framer-motion';
24

35
export function AnimatedContainer({

src/components/codeKeywords/codeKeywords.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use client';
2+
13
import {Children, cloneElement, ReactElement} from 'react';
24

35
import {KeywordSelector} from './keywordSelector';

src/components/codeKeywords/keyword.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use client';
2+
13
import {MotionProps} from 'framer-motion';
24

35
import {KeywordSpan} from './styles.css';

src/components/codeKeywords/keywordSelector.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
'use client';
2+
13
import {ComponentProps, Fragment, useContext, useState} from 'react';
24
import {createPortal} from 'react-dom';
35
import {usePopper} from 'react-popper';
46
import {AnimatePresence} from 'framer-motion';
57
import {useTheme} from 'next-themes';
68

79
import {useOnClickOutside} from 'sentry-docs/clientUtils';
10+
import {useIsMounted} from 'sentry-docs/hooks/isMounted';
811

912
import {CodeContext} from '../codeContext';
1013

@@ -36,6 +39,7 @@ export function KeywordSelector({keyword, group, index}: KeywordSelectorProps) {
3639
const [orgFilter, setOrgFilter] = useState('');
3740
const {theme} = useTheme();
3841
const isDarkMode = theme === 'dark';
42+
const {isMounted} = useIsMounted();
3943

4044
const {styles, state, attributes} = usePopper(
4145
referenceEl,
@@ -144,7 +148,7 @@ export function KeywordSelector({keyword, group, index}: KeywordSelectorProps) {
144148
</AnimatePresence>
145149
</span>
146150
</KeywordDropdown>
147-
{document &&
151+
{isMounted &&
148152
createPortal(<AnimatePresence>{selector}</AnimatePresence>, document.body)}
149153
</Fragment>
150154
);

src/components/codeKeywords/orgAuthTokenCreator.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1+
'use client';
2+
13
import {Fragment, useContext, useState} from 'react';
24
import {createPortal} from 'react-dom';
35
import {usePopper} from 'react-popper';
46
import {AnimatePresence} from 'framer-motion';
57
import {useTheme} from 'next-themes';
68

79
import {useOnClickOutside} from 'sentry-docs/clientUtils';
10+
import {useIsMounted} from 'sentry-docs/hooks/isMounted';
811

912
import {CodeContext, createOrgAuthToken} from '../codeContext';
1013

@@ -41,6 +44,8 @@ export function OrgAuthTokenCreator() {
4144
const {theme} = useTheme();
4245
const isDarkMode = theme === 'dark';
4346

47+
const {isMounted} = useIsMounted();
48+
4449
useOnClickOutside({
4550
ref: {current: referenceEl},
4651
enabled: isOpen,
@@ -192,7 +197,7 @@ export function OrgAuthTokenCreator() {
192197
</AnimatePresence>
193198
</span>
194199
</KeywordDropdown>
195-
{document &&
200+
{isMounted &&
196201
createPortal(<AnimatePresence>{selector}</AnimatePresence>, document.body)}
197202
</Fragment>
198203
);

src/components/codeKeywords/styles.css.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
'use client';
2+
13
import {ArrowDown} from 'react-feather';
24
import styled from '@emotion/styled';
35
import {motion} from 'framer-motion';

src/hooks/isMounted.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {useEffect, useState} from 'react';
2+
3+
export const useIsMounted = () => {
4+
const [isMounted, setIsMounted] = useState(false);
5+
6+
useEffect(() => {
7+
setIsMounted(true);
8+
}, []);
9+
10+
return {isMounted};
11+
};

0 commit comments

Comments
 (0)