Skip to content

Commit 6ff6d26

Browse files
fix: replace uselayouteffect with isomorphic effect (#8630)
Co-authored-by: Jeff Longshore <[email protected]>
1 parent 0583e3b commit 6ff6d26

File tree

17 files changed

+860
-216
lines changed

17 files changed

+860
-216
lines changed

packages/ibm-products-styles/src/__tests__/__snapshots__/styles.test.js.snap

Lines changed: 811 additions & 160 deletions
Large diffs are not rendered by default.

packages/ibm-products/src/components/Coachmark/next/Coachmark/CoachmarkBubble/CoachmarkBubble.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,7 @@ import {
1313
useTheme,
1414
usePrefix as useCarbonPrefix,
1515
} from '@carbon/react';
16-
import React, {
17-
forwardRef,
18-
HTMLProps,
19-
RefObject,
20-
useLayoutEffect,
21-
useRef,
22-
} from 'react';
16+
import React, { forwardRef, HTMLProps, RefObject, useRef } from 'react';
2317
import {
2418
autoUpdate,
2519
computePosition,
@@ -29,6 +23,7 @@ import {
2923
arrow,
3024
} from '@floating-ui/react';
3125
import { pkg } from '../../../../../settings';
26+
import { useIsomorphicEffect } from '../../../../../global/js/hooks';
3227

3328
interface BubbleProps extends Omit<HTMLProps<HTMLDivElement>, 'target'> {
3429
/**
@@ -76,7 +71,7 @@ const CoachmarkBubble = forwardRef<HTMLDivElement, BubbleProps>(
7671
const arrowRef = useRef<HTMLDivElement | null>(null);
7772
const targetRef = useRef<Element | null>(null);
7873

79-
useLayoutEffect(() => {
74+
useIsomorphicEffect(() => {
8075
if (target) {
8176
if (typeof target === 'string') {
8277
if (target === '#' || target.trim() === '') {

packages/ibm-products/src/components/Coachmark/utils/hooks.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import { useEffect, useRef, useLayoutEffect } from 'react';
8+
import { useEffect, useRef } from 'react';
9+
import { useIsomorphicEffect } from '../../../global/js/hooks';
910
import { COACHMARK_OVERLAY_KIND } from './enums';
1011

1112
/**
@@ -24,10 +25,10 @@ function useClickOutsideElement(
2425
) {
2526
const cb = useRef(undefined);
2627
const isTooltip = overlayKind === COACHMARK_OVERLAY_KIND.TOOLTIP;
27-
useLayoutEffect(() => {
28+
useIsomorphicEffect(() => {
2829
cb.current = callback;
2930
}, [callback]);
30-
useEffect(() => {
31+
useIsomorphicEffect(() => {
3132
function handleClickOutside(event) {
3233
const isOverlayOutside =
3334
overlayRef.current && !overlayRef.current.contains(event.target);

packages/ibm-products/src/components/Datagrid/Datagrid/DatagridSelectAll.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import React, { useCallback, useLayoutEffect, useState } from 'react';
8+
import React, { useCallback, useState } from 'react';
9+
import { useIsomorphicEffect } from '../../../global/js/hooks';
910
import { TableSelectAll } from '@carbon/react';
1011
import cx from 'classnames';
1112
import { pkg } from '../../../settings';
@@ -19,7 +20,7 @@ const blockClass = `${pkg.prefix}--datagrid`;
1920

2021
const SelectAll = (datagridState: DataGridState) => {
2122
const [windowSize, setWindowSize] = useState<number>();
22-
useLayoutEffect(() => {
23+
useIsomorphicEffect(() => {
2324
setWindowSize(window.innerWidth);
2425
/* istanbul ignore next */
2526
function updateSize() {

packages/ibm-products/src/components/Datagrid/Datagrid/DatagridSelectAllWithToggle.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import React, { useEffect, useState, useLayoutEffect } from 'react';
8+
import React, { useEffect, useState } from 'react';
9+
import { useIsomorphicEffect } from '../../../global/js/hooks';
910
import PropTypes from 'prop-types';
1011
import cx from 'classnames';
1112
import { Checkbox, OverflowMenu, OverflowMenuItem } from '@carbon/react';
@@ -39,7 +40,7 @@ const SelectAllWithToggle = ({
3940
}, [isAllRowsSelected, selectAllMode, onSelectAllRows]);
4041

4142
const [windowSize, setWindowSize] = useState<number>();
42-
useLayoutEffect(() => {
43+
useIsomorphicEffect(() => {
4344
setWindowSize(window.innerWidth);
4445
function updateSize() {
4546
setWindowSize(window.innerWidth);

packages/ibm-products/src/components/Datagrid/useResizeTable.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import { useLayoutEffect } from 'react';
8+
import { useIsomorphicEffect } from '../../global/js/hooks';
99

1010
const useResizeTable = (hooks) => {
1111
const useInstanceBeforeDimensions = (instance) => {
1212
const { rootRef, handleResize } = instance;
1313
const parent = rootRef && rootRef.current && rootRef.current.parentElement;
14-
useLayoutEffect(() => {
14+
useIsomorphicEffect(() => {
1515
if (!parent) {
1616
return () => {};
1717
}

packages/ibm-products/src/components/Datagrid/useSelectRows.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import React, { useCallback, useLayoutEffect, useState } from 'react';
8+
import React, { useCallback, useState } from 'react';
9+
import { useIsomorphicEffect } from '../../global/js/hooks';
910
import cx from 'classnames';
1011
import { TableSelectRow, usePrefix } from '@carbon/react';
1112
import { SelectAll } from './Datagrid/DatagridSelectAll';
@@ -101,7 +102,7 @@ const SelectRow = (datagridState) => {
101102

102103
const [windowSize, setWindowSize] = useState<number>();
103104

104-
useLayoutEffect(() => {
105+
useIsomorphicEffect(() => {
105106
setWindowSize(window.innerWidth);
106107
function updateSize() {
107108
setWindowSize(window.innerWidth);

packages/ibm-products/src/components/Datagrid/useStickyColumn.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,8 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import {
9-
useEffect,
10-
useRef,
11-
useLayoutEffect,
12-
useState,
13-
MutableRefObject,
14-
} from 'react';
8+
import { useEffect, useRef, useState, MutableRefObject } from 'react';
9+
import { useIsomorphicEffect } from '../../global/js/hooks';
1510
import { debounce } from '../../global/js/utils/debounce';
1611
import cx from 'classnames';
1712
import { pkg } from '../../settings';
@@ -44,7 +39,7 @@ const useStickyColumn = (hooks: Hooks) => {
4439
setWindowSize(window?.innerWidth);
4540
}, []);
4641

47-
useLayoutEffect(() => {
42+
useIsomorphicEffect(() => {
4843
/* istanbul ignore next */
4944
function updateSize() {
5045
setWindowSize(window.innerWidth);

packages/ibm-products/src/components/Datagrid/utils/DatagridActions.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import {
2727
MenuButton,
2828
MenuItem,
2929
} from '@carbon/react';
30-
import React, { useLayoutEffect, useState } from 'react';
30+
import React, { useState } from 'react';
31+
import { useIsomorphicEffect } from '../../../global/js/hooks';
3132

3233
import { action } from 'storybook/actions';
3334
import { pkg } from '../../../settings';
@@ -79,7 +80,7 @@ export const DatagridActions = (datagridState) => {
7980

8081
const [modalOpen, setModalOpen] = useState(false);
8182
const [size, setSize] = useState(window.innerWidth);
82-
useLayoutEffect(() => {
83+
useIsomorphicEffect(() => {
8384
function updateSize() {
8485
setSize(window.innerWidth);
8586
}

packages/ibm-products/src/components/PageHeader/next/PageHeader.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ import React, {
88
type ComponentType,
99
type FunctionComponent,
1010
useEffect,
11-
useLayoutEffect,
1211
useState,
1312
useRef,
1413
useCallback,
1514
RefObject,
1615
forwardRef,
1716
} from 'react';
17+
import { useIsomorphicEffect } from '../../../global/js/hooks';
1818
import PropTypes from 'prop-types';
1919
import classnames from 'classnames';
2020
import {
@@ -379,7 +379,7 @@ const PageHeaderContent = React.forwardRef<
379379
return element.offsetHeight < element.scrollHeight;
380380
};
381381

382-
useLayoutEffect(() => {
382+
useIsomorphicEffect(() => {
383383
titleRef.current && isEllipsisActive(titleRef.current);
384384
}, [title]);
385385

@@ -518,7 +518,7 @@ const PageHeaderContentPageActions = ({
518518

519519
// need to set the grid columns width based on the menu button's width
520520
// to avoid overlapping when resizing
521-
useLayoutEffect(() => {
521+
useIsomorphicEffect(() => {
522522
if (menuButtonVisibility && offsetRef.current) {
523523
const width = offsetRef.current.offsetWidth;
524524
document.documentElement.style.setProperty(

0 commit comments

Comments
 (0)