Skip to content

Commit f7fdaff

Browse files
authored
UIIN-3750 Focus on the Close Instance pane button when returning from MARC edit/create/derive page (#2948)
* UIIN-3750 Focus on the Close Instance pane button when returning from MARC edit/create/derive page * UIIN-3570 fix test * UIIN-3570 update branch with master
1 parent 9e1f21b commit f7fdaff

File tree

4 files changed

+17
-10
lines changed

4 files changed

+17
-10
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ UIIN-3437.
116116
* Fix items list data caching issues after remounting ViewInstanceDetails pane. Fixes UIIN-3627.
117117
* Update label references from "Linked data editor" to "Marigold". Refs UILD-771.
118118
* The "Action" button remains visible after opening "Version History" pane. Fixes UIIN-3629.
119+
* Focus on the Close Instance pane button when returning from MARC edit/create/derive page. Fixes UIIN-3570.
119120

120121
## [13.0.13](https://github.com/folio-org/ui-inventory/tree/v13.0.13) (2026-03-11)
121122
[Full Changelog](https://github.com/folio-org/ui-inventory/compare/v13.0.12...v13.0.13)

src/Instance/ViewInstance/ViewInstance.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ const ViewInstanceComponent = (props) => {
8484
const history = useHistory();
8585
const location = useLocation();
8686
const paneTitleRef = useRef(null);
87+
const closeButtonRef = useRef(null);
8788
const accordionStatusRef = useRef();
8889

8990
const centralTenantId = stripes.user.user?.consortium?.centralTenantId;
@@ -157,10 +158,14 @@ const ViewInstanceComponent = (props) => {
157158
}, [isTLRSettingsLoading, tlrSettings]);
158159

159160
useEffect(() => {
160-
if (!isLoading && instance?.id && focusTitleOnInstanceLoad && !isCentralTenantPermissionsLoading) {
161-
paneTitleRef.current?.focus();
161+
if (!isLoading && instance?.id && !isCentralTenantPermissionsLoading) {
162+
if (location.state?.isClosingFocused) {
163+
closeButtonRef.current?.focus();
164+
} else if (focusTitleOnInstanceLoad) {
165+
paneTitleRef.current?.focus();
166+
}
162167
}
163-
}, [isLoading, instance?.id, focusTitleOnInstanceLoad, isCentralTenantPermissionsLoading]);
168+
}, [isLoading, instance, focusTitleOnInstanceLoad, isCentralTenantPermissionsLoading, location.state?.isClosingFocused]);
164169

165170
const {
166171
isItemsMovement,
@@ -342,6 +347,7 @@ const ViewInstanceComponent = (props) => {
342347
isInstanceSharing={isInstanceSharing}
343348
holdingsSection={holdingsSection}
344349
paneTitleRef={paneTitleRef}
350+
closeButtonRef={closeButtonRef}
345351
accordionStatusRef={accordionStatusRef}
346352
isRecordImporting={isImporting}
347353
/>

src/Instance/ViewInstance/ViewInstance.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ import { getTlrSettings } from './ViewInstance';
1212

1313
jest.mock('react-router-dom', () => ({
1414
...jest.requireActual('react-router-dom'),
15-
useLocation: jest.fn(),
15+
useLocation: jest.fn().mockReturnValue({
16+
state: {},
17+
}),
1618
useHistory: jest.fn(),
1719
useParams: jest.fn().mockReturnValue({ id: 'instance-id' }),
1820
}));

src/Instance/ViewInstance/ViewInstancePane/ViewInstancePane.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ import {
66
FormattedMessage,
77
useIntl,
88
} from 'react-intl';
9-
import {
10-
useLocation,
11-
useParams,
12-
} from 'react-router-dom';
9+
import { useParams } from 'react-router-dom';
1310
import PropTypes from 'prop-types';
1411

1512
import {
@@ -63,13 +60,13 @@ const ViewInstancePane = ({
6360
isInstanceSharing = false,
6461
holdingsSection,
6562
paneTitleRef,
63+
closeButtonRef,
6664
accordionStatusRef,
6765
isRecordImporting,
6866
}) => {
6967
const intl = useIntl();
7068
const stripes = useStripes();
7169
const { id: instanceId } = useParams();
72-
const location = useLocation();
7370
const tags = instance?.tags?.tagList;
7471

7572
const [helperApp, setHelperApp] = useState();
@@ -184,9 +181,9 @@ const ViewInstancePane = ({
184181
actionMenu={isVersionHistoryOpen ? null : actionMenu}
185182
firstMenu={(
186183
<PaneCloseLink
187-
autoFocus={location.state?.isClosingFocused}
188184
onClick={onClose}
189185
aria-label={intl.formatMessage({ id: 'stripes-components.closeItem' }, { item: paneTitle })}
186+
closeButtonRef={closeButtonRef}
190187
/>
191188
)}
192189
defaultWidth="fill"
@@ -240,6 +237,7 @@ ViewInstancePane.propTypes = {
240237
isInstanceSharing: PropTypes.bool,
241238
holdingsSection: PropTypes.node,
242239
paneTitleRef: PropTypes.object,
240+
closeButtonRef: PropTypes.object,
243241
accordionStatusRef: PropTypes.object,
244242
isRecordImporting: PropTypes.bool
245243
};

0 commit comments

Comments
 (0)