Skip to content

Commit a67057f

Browse files
committed
outsource blur handler
1 parent 118ea4a commit a67057f

File tree

1 file changed

+21
-19
lines changed
  • packages/main/src/components/ObjectPage

1 file changed

+21
-19
lines changed

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

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
useSyncRef,
1111
} from '@ui5/webcomponents-react-base';
1212
import { clsx } from 'clsx';
13-
import type { CSSProperties, MouseEventHandler, ReactElement, UIEventHandler } from 'react';
13+
import type { CSSProperties, FocusEventHandler, MouseEventHandler, ReactElement, UIEventHandler } from 'react';
1414
import { cloneElement, forwardRef, isValidElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';
1515
import { ObjectPageMode } from '../../enums/ObjectPageMode.js';
1616
import { safeGetChildrenArray } from '../../internal/safeGetChildrenArray.js';
@@ -626,6 +626,25 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
626626
}
627627
}, [isMounted, children, mode]);
628628

629+
const handleContentBlur: FocusEventHandler<HTMLDivElement> = (e) => {
630+
const opNode = objectPageRef.current;
631+
if (!opNode) return;
632+
633+
if (e.relatedTarget && !e.currentTarget.contains(e.relatedTarget as Node)) {
634+
opNode.style.scrollPaddingBlock = '0px';
635+
// Fallback: Some (ui5-table) ui5wc components don't implement `relatedTarget` as expected.
636+
} else if (!e.relatedTarget) {
637+
const currentTarget = e.currentTarget;
638+
opNode.style.scrollPaddingBlock = '0px';
639+
requestAnimationFrame(() => {
640+
if (currentTarget.contains(document.activeElement)) {
641+
opNode.style.scrollPaddingBlock = scrollPaddingBlock;
642+
document.activeElement.scrollIntoView({ block: 'nearest' });
643+
}
644+
});
645+
}
646+
};
647+
629648
return (
630649
<ObjectPageContext.Provider value={mode}>
631650
<div
@@ -784,24 +803,7 @@ const ObjectPage = forwardRef<ObjectPageDomRef, ObjectPagePropTypes>((props, ref
784803
opNode.style.scrollPaddingBlock = scrollPaddingBlock;
785804
}
786805
}}
787-
onBlur={(e) => {
788-
const opNode = objectPageRef.current;
789-
if (!opNode) return;
790-
791-
if (e.relatedTarget && !e.currentTarget.contains(e.relatedTarget as Node)) {
792-
opNode.style.scrollPaddingBlock = '0px';
793-
// Fallback: Some (ui5-table) ui5wc components don't implement `relatedTarget` as expected.
794-
} else if (!e.relatedTarget) {
795-
const currentTarget = e.currentTarget;
796-
opNode.style.scrollPaddingBlock = '0px';
797-
requestAnimationFrame(() => {
798-
if (currentTarget.contains(document.activeElement)) {
799-
opNode.style.scrollPaddingBlock = scrollPaddingBlock;
800-
document.activeElement.scrollIntoView({ block: 'nearest' });
801-
}
802-
});
803-
}
804-
}}
806+
onBlur={handleContentBlur}
805807
>
806808
<div
807809
style={{

0 commit comments

Comments
 (0)