diff --git a/CHANGELOG.md b/CHANGELOG.md index 435cfe3..7634a96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [9.0.2] IN PROGRESS * Hide fee/fine action menu items when requester is virtual user. Refs UICHKIN-398. +* Hide “Item details” option in Actions menu when item is virtual. Refs UICHKIN-403. ## [9.0.1] (https://github.com/folio-org/ui-checkin/tree/v9.0.1) (2023-10-23) [Full Changelog](https://github.com/folio-org/ui-checkin/compare/v9.0.0...v9.0.1) diff --git a/src/CheckIn.js b/src/CheckIn.js index d84baad..2283a57 100644 --- a/src/CheckIn.js +++ b/src/CheckIn.js @@ -40,6 +40,7 @@ import { convertToSlipData, getCheckinSettings, isDcbUser, + isDCBItem, } from './util'; import styles from './checkin.css'; @@ -304,12 +305,14 @@ class CheckIn extends React.Component { timezone, locale, }, + scannedItems, } = this.props; const isCheckInNote = element => element.noteType === 'Check in'; const checkinNotePresent = get(loan.item, ['circulationNotes'], []).some(isCheckInNote); const loanOpenRequest = loan?.staffSlipContext?.request ?? {}; const isVirtualUser = isDcbUser(loan?.borrower); + const isVirtualItem = isDCBItem(get(scannedItems, [0, 'item'])); const trigger = ({ getTriggerProps, triggerRef }) => ( - } + + }
- + { + !isVirtualItem && ( + + ) + }
{!isEmpty(loanOpenRequest) &&
diff --git a/src/components/FeeFineDetailsButton/FeeFineDetailsButton.test.js b/src/components/FeeFineDetailsButton/FeeFineDetailsButton.test.js index 73e37d2..dd60f14 100644 --- a/src/components/FeeFineDetailsButton/FeeFineDetailsButton.test.js +++ b/src/components/FeeFineDetailsButton/FeeFineDetailsButton.test.js @@ -9,7 +9,7 @@ import { import { account as accountFixture } from '../../../test/jest/fixtures/account'; import { loan as loanFixture } from '../../../test/jest/fixtures/loan'; import FeeFineDetailsButton from './FeeFineDetailsButton'; -import { DCB_USER } from '../../consts'; +import { DCB_USER_LASTNAME } from '../../consts'; const mockedQueryUpdate = jest.fn(); const labelIds = { @@ -203,7 +203,7 @@ describe('FeeFineDetailsButton', () => { ...loanFixture.loan, borrower: { ...loanFixture.loan.borrower, - lastName: DCB_USER.lastName, + lastName: DCB_USER_LASTNAME, } } }; diff --git a/src/consts.js b/src/consts.js index 1938bbd..4636c80 100644 --- a/src/consts.js +++ b/src/consts.js @@ -57,6 +57,11 @@ export const cancelFeeClaimReturned = { export const MAX_RECORDS = '1000'; +export const DCB_USER_LASTNAME = 'DcbSystem'; + export const DCB_USER = { - lastName: 'DcbSystem', + lastName: DCB_USER_LASTNAME, }; + +export const DCB_INSTANCE_ID = '9d1b77e4-f02e-4b7f-b296-3f2042ddac54'; +export const DCB_HOLDINGS_RECORD_ID = '10cd3a5a-d36f-4c7a-bc4f-e1ae3cf820c9'; diff --git a/src/util.js b/src/util.js index 924e561..798968f 100644 --- a/src/util.js +++ b/src/util.js @@ -7,6 +7,8 @@ import { import { DCB_USER, statuses, + DCB_INSTANCE_ID, + DCB_HOLDINGS_RECORD_ID, } from './consts'; export const escapeValue = (val) => { @@ -169,4 +171,6 @@ export function shouldConfirmStatusModalBeShown(item) { export const isDcbUser = (user) => user?.lastName === DCB_USER.lastName; +export const isDCBItem = (item) => item.instanceId === DCB_INSTANCE_ID && item.holdingsRecordId === DCB_HOLDINGS_RECORD_ID; + export default {}; diff --git a/src/util.test.js b/src/util.test.js index f97f3a1..8b187e2 100644 --- a/src/util.test.js +++ b/src/util.test.js @@ -13,10 +13,13 @@ import { getCheckinSettings, shouldConfirmStatusModalBeShown, isDcbUser, + isDCBItem, } from './util'; import { DCB_USER, + DCB_INSTANCE_ID, + DCB_HOLDINGS_RECORD_ID, statuses, } from './consts'; @@ -323,9 +326,7 @@ describe('shouldConfirmStatusModalBeShown', () => { describe('isDcbUser', () => { it('should return true when user has lastName as "DcbSystem"', () => { - const user = { - lastName: DCB_USER.lastName, - }; + const user = DCB_USER; expect(isDcbUser(user)).toBeTruthy(); }); @@ -338,3 +339,37 @@ describe('isDcbUser', () => { expect(isDcbUser(user)).toBeFalsy(); }); }); + +describe('isDCBItem ', () => { + it('should return true when both item instance id and item holdings record id are DCB_INSTANCE_ID and DCB_HOLDINGS_RECORD_ID respectively', () => { + const item = { + instanceId: DCB_INSTANCE_ID, + holdingsRecordId: DCB_HOLDINGS_RECORD_ID, + }; + expect(isDCBItem(item)).toBeTruthy(); + }); + + it('should return false when item instance id is DCB_INSTANCE_ID and item holdings record id is not DCB_HOLDINGS_RECORD_ID', () => { + const item = { + instanceId: DCB_INSTANCE_ID, + holdingsRecordId: 'test', + }; + expect(isDCBItem(item)).toBeFalsy(); + }); + + it('should return false when item instance id is not DCB_INSTANCE_ID and item holdings record id is DCB_HOLDINGS_RECORD_ID', () => { + const item = { + instanceId: 'test', + holdingsRecordId: DCB_HOLDINGS_RECORD_ID, + }; + expect(isDCBItem(item)).toBeFalsy(); + }); + + it('should return false when item instance id is not DCB_INSTANCE_ID and item holdings record id is not DCB_HOLDINGS_RECORD_ID', () => { + const item = { + instanceId: 'test', + holdingsRecordId: 'test', + }; + expect(isDCBItem(item)).toBeFalsy(); + }); +});