Skip to content

Commit 7c71bb0

Browse files
committed
SplitterLayout: fix lint errors
1 parent c4e7ce7 commit 7c71bb0

File tree

4 files changed

+18
-24
lines changed

4 files changed

+18
-24
lines changed

packages/main/src/components/SelectDialog/index.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import announce from '@ui5/webcomponents-base/dist/util/InvisibleMessage.js';
1111
import iconSearch from '@ui5/webcomponents-icons/dist/search.js';
1212
import { enrichEventWithDetails, useI18nBundle, useStylesheet, useSyncRef } from '@ui5/webcomponents-react-base';
1313
import { clsx } from 'clsx';
14-
import type { ReactNode } from 'react';
14+
import type { ReactNode, RefObject } from 'react';
1515
import { forwardRef, useEffect, useState } from 'react';
1616
import { FlexBoxAlignItems } from '../../enums/FlexBoxAlignItems.js';
1717
import { CANCEL, CLEAR, SEARCH, SELECT, SELECTED, SELECTED_ITEMS } from '../../i18n/i18n-defaults.js';
@@ -188,7 +188,9 @@ const SelectDialog = forwardRef<DialogDomRef, SelectDialogPropTypes>((props, ref
188188
const i18nBundle = useI18nBundle('@ui5/webcomponents-react');
189189
const [searchValue, setSearchValue] = useState('');
190190
const [selectedItems, setSelectedItems] = useState([]);
191-
const [listComponentRef, listRef] = useSyncRef<ListDomRefWithPrivateAPIs>((listProps as any).ref);
191+
const [listComponentRef, listRef] = useSyncRef<ListDomRefWithPrivateAPIs>(
192+
(listProps as SelectDialogPropTypes['listProps'] & { ref: RefObject<ListDomRefWithPrivateAPIs> }).ref,
193+
);
192194
const [internalOpen, setInternalOpen] = useState(open);
193195
useEffect(() => {
194196
setInternalOpen(open);

packages/main/src/components/Splitter/index.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const Splitter = forwardRef<HTMLDivElement, SplitterPropTypes>((props, ref) => {
5959
const positionKeys = vertical ? verticalPositionInfo : horizontalPositionInfo;
6060

6161
const [isDragging, setIsDragging] = useState<boolean | string>(false);
62-
const [isSiblings, setIsSiblings] = useState(['previousSibling', 'nextSibling']);
62+
const isSiblings = isRtl && !vertical ? ['nextSibling', 'previousSibling'] : ['previousSibling', 'nextSibling'];
6363

6464
const animationFrameIdRef = useRef(null);
6565
const fireOnResize = (prevSibling: HTMLElement, nextSibling: HTMLElement) => {
@@ -282,10 +282,6 @@ const Splitter = forwardRef<HTMLDivElement, SplitterPropTypes>((props, ref) => {
282282
};
283283
}, [isDragging]);
284284

285-
useEffect(() => {
286-
setIsSiblings(isRtl && !vertical ? ['nextSibling', 'previousSibling'] : ['previousSibling', 'nextSibling']);
287-
}, [isRtl, vertical]);
288-
289285
const currentTheme = useCurrentTheme();
290286
const isHighContrast =
291287
currentTheme === 'sap_fiori_3_hcb' ||

packages/main/src/components/SplitterElement/index.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,47 +50,41 @@ const SplitterElement = forwardRef<HTMLDivElement, SplitterElementPropTypes>((pr
5050
const { vertical, reset } = useContext(SplitterLayoutContext);
5151
const safariStyles = Device.isSafari() ? { width: 'min-content', flex: '1 1 auto' } : {};
5252
const _size = typeof size === 'number' ? `${size}px` : size;
53-
const defaultFlexStyles = _size !== 'auto' ? { flex: `0 1 ${_size}` } : { flex: '1 0 min-content', ...safariStyles };
54-
const [flexStyles, setFlexStyles] = useState(defaultFlexStyles);
5553
const [flexBasisApplied, setFlexBasisApplied] = useState(false);
54+
const [observedFlex, setObservedFlex] = useState<CSSProperties | null>(null);
55+
const flexStyles =
56+
_size !== 'auto' ? { flex: `0 1 ${_size}` } : (observedFlex ?? { flex: '1 0 min-content', ...safariStyles });
5657

5758
useStylesheet(styleData, SplitterElement.displayName);
58-
5959
useEffect(() => {
60+
if (_size !== 'auto') return;
61+
6062
const elementObserver = new ResizeObserver(([element]) => {
6163
if (element.target.getBoundingClientRect().width !== 0 && !flexBasisApplied) {
6264
const resetSafariStyles = Device.isSafari() ? { width: 'unset' } : {};
63-
setFlexStyles({
65+
setObservedFlex({
6466
flex: `0 0 ${element.target.getBoundingClientRect()[vertical ? 'height' : 'width']}px`,
6567
...resetSafariStyles,
6668
});
6769
setFlexBasisApplied(true);
6870
}
6971
});
7072

71-
if (_size === 'auto' && splitterElementRef.current) {
73+
if (splitterElementRef.current) {
7274
elementObserver.observe(splitterElementRef.current);
73-
} else {
74-
setFlexStyles({ flex: `0 1 ${_size}` });
7575
}
7676

7777
return () => {
7878
elementObserver.disconnect();
7979
};
80-
}, [_size, flexBasisApplied, vertical]);
80+
}, [_size, flexBasisApplied, splitterElementRef, vertical]);
8181

8282
useIsomorphicLayoutEffect(() => {
8383
if (reset) {
84-
setFlexStyles(undefined);
84+
setObservedFlex(null);
8585
setFlexBasisApplied(false);
8686
}
87-
}, [reset, _size]);
88-
89-
useIsomorphicLayoutEffect(() => {
90-
if (flexStyles === undefined) {
91-
setFlexStyles(defaultFlexStyles);
92-
}
93-
}, [flexStyles]);
87+
}, [reset]);
9488

9589
return (
9690
<div

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ const SplitterLayout = forwardRef<HTMLDivElement, SplitterLayoutPropTypes>((prop
5353
setReset(true);
5454
}
5555
initialCustomDep.current = false;
56+
// Can't determine external dependencies
57+
// eslint-disable-next-line react-hooks/exhaustive-deps
5658
}, options?.resetOnCustomDepsChange ?? []);
5759

5860
useEffect(() => {
@@ -76,7 +78,7 @@ const SplitterLayout = forwardRef<HTMLDivElement, SplitterLayoutPropTypes>((prop
7678
layoutObserver.disconnect();
7779
};
7880
}
79-
}, [vertical, options?.resetOnSizeChange]);
81+
}, [vertical, options?.resetOnSizeChange, sLRef]);
8082

8183
useEffect(() => {
8284
if (reset) {

0 commit comments

Comments
 (0)