Skip to content

Commit

Permalink
Use instanceId param for ILR from items response
Browse files Browse the repository at this point in the history
  • Loading branch information
artem-blazhko committed Oct 7, 2024
1 parent 9fdbd0d commit cd972df
Show file tree
Hide file tree
Showing 12 changed files with 38 additions and 112 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
* Add sorting to 'Printed' and '# Copies' columns in the Request App. Refs UIREQ-1140.
* Implement "Print Status" filters as server-side filters. Refs UIREQ-1147.
* Navigate to first page when saving the pick slip print log from beyond the first page. Refs UIREQ-1145.
* Use `instanceId` param for ILR from items response. Refs UIREQ-1149.

## [9.1.2] (https://github.com/folio-org/ui-requests/tree/v9.1.2) (2024-09-13)
[Full Changelog](https://github.com/folio-org/ui-requests/compare/v9.1.1...v9.1.2)
Expand Down
24 changes: 14 additions & 10 deletions src/RequestForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ class RequestForm extends React.Component {
values: PropTypes.object.isRequired,
form: PropTypes.object.isRequired,
blocked: PropTypes.bool.isRequired,
instanceId: PropTypes.string.isRequired,
isPatronBlocksOverridden: PropTypes.bool.isRequired,
onSubmit: PropTypes.func,
parentMutator: PropTypes.shape({
Expand All @@ -160,7 +159,6 @@ class RequestForm extends React.Component {
onSetSelectedInstance: PropTypes.func.isRequired,
onSetBlocked: PropTypes.func.isRequired,
onSetIsPatronBlocksOverridden: PropTypes.func.isRequired,
onSetInstanceId: PropTypes.func.isRequired,
};

static defaultProps = {
Expand Down Expand Up @@ -717,22 +715,21 @@ class RequestForm extends React.Component {
findItemRelatedResources(item) {
const {
findResource,
onSetInstanceId,
} = this.props;
if (!item) return null;

if (!item) {
return null;
}

return Promise.all(
[
findResource('loan', item.id),
findResource('requestsForItem', item.id),
findResource(RESOURCE_TYPES.HOLDING, item.holdingsRecordId),
],
).then((results) => {
const selectedLoan = results[0]?.loans?.[0];
const itemRequestCount = results[1]?.requests?.length;
const holdingsRecord = results[2]?.holdingsRecords?.[0];

onSetInstanceId(holdingsRecord?.instanceId);
this.setState({
itemRequestCount,
selectedLoan,
Expand Down Expand Up @@ -811,6 +808,11 @@ class RequestForm extends React.Component {

return foundItem;
})
.catch(() => {
onSetSelectedItem(null);

return null;
})
.then(item => {
if (item && selectedUser?.id) {
const requester = getRequester(proxy, selectedUser);
Expand Down Expand Up @@ -888,6 +890,11 @@ class RequestForm extends React.Component {

return instance;
})
.catch(() => {
onSetSelectedInstance(null);

return null;
})
.then(instance => {
if (instance && selectedUser?.id) {
const requester = getRequester(proxy, selectedUser);
Expand Down Expand Up @@ -1093,7 +1100,6 @@ class RequestForm extends React.Component {
selectedUser,
selectedInstance,
isPatronBlocksOverridden,
instanceId,
blocked,
values,
onCancel,
Expand Down Expand Up @@ -1283,7 +1289,6 @@ class RequestForm extends React.Component {
onSetSelectedInstance={onSetSelectedInstance}
isLoading={isItemOrInstanceLoading}
instanceRequestCount={instanceRequestCount}
instanceId={instanceId}
/>
</div>
</Accordion>
Expand All @@ -1305,7 +1310,6 @@ class RequestForm extends React.Component {
onSetSelectedItem={onSetSelectedItem}
values={values}
itemRequestCount={itemRequestCount}
instanceId={instanceId}
selectedLoan={selectedLoan}
isLoading={isItemOrInstanceLoading}
/>
Expand Down
23 changes: 1 addition & 22 deletions src/RequestForm.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,6 @@ describe('RequestForm', () => {
onSetSelectedInstance: jest.fn(),
onSetSelectedItem: jest.fn(),
onSetSelectedUser: jest.fn(),
onSetInstanceId: jest.fn(),
onSetIsPatronBlocksOverridden: jest.fn(),
onSetBlocked: jest.fn(),
onShowErrorModal: jest.fn(),
Expand Down Expand Up @@ -1232,6 +1231,7 @@ describe('RequestForm', () => {
id: 'itemId',
barcode: initialItemBarcode,
holdingsRecordId: 'holdingsRecordId',
instanceId,
}
],
};
Expand All @@ -1253,13 +1253,6 @@ describe('RequestForm', () => {
const itemRequestsResult = {
requests: [],
};
const holdingsRecordResult = {
holdingsRecords: [
{
instanceId,
}
],
};
let findResource;

beforeEach(() => {
Expand All @@ -1269,7 +1262,6 @@ describe('RequestForm', () => {
.mockResolvedValueOnce(requestTypesResult)
.mockResolvedValueOnce(loanResult)
.mockResolvedValueOnce(itemRequestsResult)
.mockResolvedValueOnce(holdingsRecordResult)
.mockResolvedValue({});

const props = {
Expand Down Expand Up @@ -1338,19 +1330,6 @@ describe('RequestForm', () => {
expect(findResource).toHaveBeenCalledWith(...expectedArgs);
});

it('should get information about holdings', () => {
const expectedArgs = [
RESOURCE_TYPES.HOLDING,
itemResult.items[0].holdingsRecordId
];

expect(findResource).toHaveBeenCalledWith(...expectedArgs);
});

it('should set instance id', () => {
expect(basicProps.onSetInstanceId).toHaveBeenCalledWith(holdingsRecordResult.holdingsRecords[0].instanceId);
});

it('should handle item barcode field change', () => {
const expectedArgs = [RESOURCE_TYPES.ITEM, fieldValue, RESOURCE_KEYS.id];
const itemField = screen.getByTestId(testIds.itemField);
Expand Down
9 changes: 1 addition & 8 deletions src/RequestFormContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ const RequestFormContainer = ({
const [selectedUser, setSelectedUser] = useState({ ...requester, id: requesterId });
const [selectedInstance, setSelectedInstance] = useState(request?.instance);
const [isPatronBlocksOverridden, setIsPatronBlocksOverridden] = useState(false);
const [instanceId, setInstanceId] = useState('');
const [blocked, setBlocked] = useState(false);

const setItem = (optedItem) => {
Expand All @@ -62,10 +61,6 @@ const RequestFormContainer = ({
setIsPatronBlocksOverridden(value);
};

const setStateInstanceId = (id) => {
setInstanceId(id);
};

const getPatronManualBlocks = (resources) => {
return (resources?.patronBlocks?.records || [])
.filter(b => b.requests === true)
Expand Down Expand Up @@ -142,7 +137,7 @@ const RequestFormContainer = ({
};
}

requestData.instanceId = request?.instanceId || instanceId || selectedInstance?.id;
requestData.instanceId = request?.instanceId || selectedInstance?.id || selectedItem?.instanceId;
requestData.requestLevel = request?.requestLevel || getRequestLevelValue(requestData.createTitleLevelRequest);

if (requestData.requestLevel === REQUEST_LEVEL_TYPES.ITEM) {
Expand Down Expand Up @@ -179,15 +174,13 @@ const RequestFormContainer = ({
selectedUser={selectedUser}
selectedInstance={selectedInstance}
isPatronBlocksOverridden={isPatronBlocksOverridden}
instanceId={instanceId}
onGetPatronManualBlocks={getPatronManualBlocks}
onGetAutomatedPatronBlocks={getAutomatedPatronBlocks}
onSetBlocked={setIsBlocked}
onSetSelectedItem={setItem}
onSetSelectedUser={setUser}
onSetSelectedInstance={setInstance}
onSetIsPatronBlocksOverridden={setStateIsPatronBlocksOverridden}
onSetInstanceId={setStateInstanceId}
onSubmit={handleSubmit}
/>
);
Expand Down
9 changes: 6 additions & 3 deletions src/RequestFormContainer.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,13 @@ describe('RequestFormContainer', () => {
},
selectedInstance: defaultProps.request.instance,
isPatronBlocksOverridden: false,
instanceId: '',
onGetPatronManualBlocks: expect.any(Function),
onGetAutomatedPatronBlocks: expect.any(Function),
onSetBlocked: expect.any(Function),
onSetSelectedItem: expect.any(Function),
onSetSelectedUser: expect.any(Function),
onSetSelectedInstance: expect.any(Function),
onSetIsPatronBlocksOverridden: expect.any(Function),
onSetInstanceId: expect.any(Function),
onSubmit: expect.any(Function),
};

Expand Down Expand Up @@ -100,13 +98,18 @@ describe('RequestFormContainer', () => {
};
const props = {
...defaultProps,
request: {
...defaultProps.request,
instanceId: null,
},
itemId: 'itemId',
item: {
id: 'id',
},
};
const selectedItem = {
holdingsRecordId: 'holdingsRecordId',
instanceId: 'instanceId',
};
const selectItemLabel = 'Select Item';

Expand Down Expand Up @@ -144,7 +147,7 @@ describe('RequestFormContainer', () => {
const expectedArg = {
holdingsRecordId: selectedItem.holdingsRecordId,
fulfillmentPreference: fulfillmentTypeMap.HOLD_SHELF,
instanceId: defaultProps.request.instanceId,
instanceId: selectedItem.instanceId,
requestLevel: REQUEST_LEVEL_TYPES.ITEM,
pickupServicePointId: submitData.pickupServicePointId,
item: submitData.item,
Expand Down
4 changes: 1 addition & 3 deletions src/components/InstanceInformation/InstanceInformation.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ class InstanceInformation extends Component {
values: PropTypes.object.isRequired,
onSetSelectedInstance: PropTypes.func.isRequired,
isLoading: PropTypes.bool.isRequired,
instanceId: PropTypes.string.isRequired,
request: PropTypes.object,
instanceRequestCount: PropTypes.number,
selectedInstance: PropTypes.object,
Expand Down Expand Up @@ -159,7 +158,6 @@ class InstanceInformation extends Component {
values,
isLoading,
instanceRequestCount,
instanceId,
} = this.props;
const {
isInstanceClicked,
Expand Down Expand Up @@ -247,7 +245,7 @@ class InstanceInformation extends Component {
{
isTitleInfoVisible &&
<TitleInformation
instanceId={request?.instanceId || selectedInstance.id || instanceId}
instanceId={request?.instanceId || selectedInstance.id}
titleLevelRequestsCount={titleLevelRequestsCount}
title={selectedInstance.title}
contributors={selectedInstance.contributors || selectedInstance.contributorNames}
Expand Down
34 changes: 3 additions & 31 deletions src/components/InstanceInformation/InstanceInformation.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ const basicProps = {
},
selectedInstance: {
title: 'instance title',
id: 'instanceId',
contributors: {},
publication: {},
editions: {},
identifiers: {},
},
instanceRequestCount: 1,
instanceId: 'instanceId',
isLoading: false,
submitting: false,
};
Expand Down Expand Up @@ -584,26 +584,6 @@ describe('InstanceInformation', () => {
});

describe('when instance is selected', () => {
it('should render "TitleInformation" with correct props', () => {
render(
<InstanceInformation
{...basicProps}
/>
);

const expectedProps = {
instanceId: basicProps.instanceId,
titleLevelRequestsCount: basicProps.instanceRequestCount,
title: basicProps.selectedInstance.title,
contributors: basicProps.selectedInstance.contributors,
publications: basicProps.selectedInstance.publication,
editions: basicProps.selectedInstance.editions,
identifiers: basicProps.selectedInstance.identifiers,
};

expect(TitleInformation).toHaveBeenCalledWith(expectedProps, {});
});

it('should render "TitleInformation" with "request.instanceId"', () => {
const instanceId = 'instanceId';
const props = {
Expand All @@ -627,21 +607,13 @@ describe('InstanceInformation', () => {
});

it('should render "TitleInformation" with "selectedInstance.id"', () => {
const selectedInstanceId = 'selectedInstanceId';
const props = {
...basicProps,
selectedInstance: {
...basicProps.selectedInstance,
id: selectedInstanceId,
},
};
const expectedProps = {
instanceId: selectedInstanceId,
instanceId: basicProps.selectedInstance.id,
};

render(
<InstanceInformation
{...props}
{...basicProps}
/>
);

Expand Down
4 changes: 1 addition & 3 deletions src/components/ItemInformation/ItemInformation.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ class ItemInformation extends Component {
request: PropTypes.object.isRequired,
onSetSelectedItem: PropTypes.func.isRequired,
itemRequestCount: PropTypes.number.isRequired,
instanceId: PropTypes.string.isRequired,
isLoading: PropTypes.bool.isRequired,
submitting: PropTypes.bool.isRequired,
isItemIdRequest: PropTypes.bool.isRequired,
Expand Down Expand Up @@ -162,7 +161,6 @@ class ItemInformation extends Component {
isLoading,
selectedItem,
request,
instanceId,
selectedLoan,
itemRequestCount,
} = this.props;
Expand Down Expand Up @@ -235,7 +233,7 @@ class ItemInformation extends Component {
selectedItem &&
<ItemDetail
request={request}
currentInstanceId={instanceId}
currentInstanceId={selectedItem.instanceId}
item={selectedItem}
loan={selectedLoan}
requestCount={itemRequestCount}
Expand Down
13 changes: 10 additions & 3 deletions src/components/ItemInformation/ItemInformation.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ const basicProps = {
selectedLoan: {},
selectedItem: {},
itemRequestCount: 1,
instanceId: 'instanceId',
isLoading: false,
submitting: false,
isItemIdRequest: true,
Expand Down Expand Up @@ -546,18 +545,26 @@ describe('ItemInformation', () => {
});

describe('when item is selected', () => {
const props = {
...basicProps,
selectedItem: {
id: 'itemId',
instanceId: 'instanceId',
},
};

beforeEach(() => {
render(
<ItemInformation
{...basicProps}
{...props}
/>
);
});

it('should render "ItemDetail" with correct props', () => {
const expectedProps = {
request: basicProps.request,
currentInstanceId: basicProps.instanceId,
currentInstanceId: basicProps.selectedItem.instanceId,
item: basicProps.selectedItem,
loan: basicProps.selectedLoan,
requestCount: basicProps.itemRequestCount,
Expand Down
Loading

0 comments on commit cd972df

Please sign in to comment.