diff --git a/CHANGELOG.md b/CHANGELOG.md index fd6d2f173..e951229f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ## [10.0.4] IN PROGRESS * Fetch sharing of local instance status in the context of member tenant. Refs UIIN-2680. +* Handle errors when sharing local instances failed. Refs UIIN-2682. ## [10.0.3] IN PROGRESS diff --git a/src/ViewInstance.js b/src/ViewInstance.js index 03d57e728..6bfe5e8bc 100644 --- a/src/ViewInstance.js +++ b/src/ViewInstance.js @@ -443,20 +443,23 @@ class ViewInstance extends React.Component { this.setState({ isImportRecordModalOpened: false }); } + showUnsuccessfulShareInstanceCallout = (instanceTitle) => { + this.calloutRef.current?.sendCallout({ + type: 'error', + message: , + }); + } + checkInstanceSharingProgress = ({ sourceTenantId, instanceIdentifier }) => { return this.props.mutator.shareInstance.GET({ params: { sourceTenantId, instanceIdentifier }, }); } - waitForInstanceSharingComplete = ({ sourceTenantId, instanceIdentifier, instanceTitle }) => { + waitForInstanceSharingComplete = ({ sourceTenantId, instanceIdentifier }) => { return new Promise((resolve, reject) => { this.intervalId = setInterval(() => { const onError = error => { - this.calloutRef.current.sendCallout({ - type: 'error', - message: , - }); clearInterval(this.intervalId); reject(error); }; @@ -498,7 +501,7 @@ class ViewInstance extends React.Component { isInstanceSharing: true, }); - await this.waitForInstanceSharingComplete({ sourceTenantId, instanceIdentifier, instanceTitle }); + await this.waitForInstanceSharingComplete({ sourceTenantId, instanceIdentifier }); }) .then(async () => { await this.props.refetchInstance(); @@ -512,11 +515,9 @@ class ViewInstance extends React.Component { this.setState({ isUnlinkAuthoritiesModalOpen: false, isShareLocalInstanceModalOpen: false, + isInstanceSharing: false, }); - this.calloutRef.current?.sendCallout({ - type: 'error', - message: , - }); + this.showUnsuccessfulShareInstanceCallout(instanceTitle); }); } @@ -545,6 +546,13 @@ class ViewInstance extends React.Component { } else { this.handleShareLocalInstance(selectedInstance); } + }).catch(() => { + this.setState({ isShareLocalInstanceModalOpen: false }); + + this.calloutRef.current.sendCallout({ + type: 'error', + message: , + }); }); } @@ -870,31 +878,90 @@ class ViewInstance extends React.Component { ); }; - render() { + renderInstanceDetails = (data, instance) => { const { - match: { params: { id, holdingsrecordid, itemid } }, - stripes, + match: { params: { holdingsrecordid, itemid } }, okapi, - onCopy, onClose, tagsEnabled, - updateLocation, - canUseSingleRecordImport, isCentralTenantPermissionsLoading, isShared, isLoading, isError, error, } = this.props; - const { - linkedAuthoritiesLength, - isInstanceSharing, - } = this.state; + const { isInstanceSharing } = this.state; const isUserLacksPermToViewSharedInstance = isError && error?.response?.status === HTTP_RESPONSE_STATUS_CODES.FORBIDDEN && isShared; + const isInstanceLoading = isLoading || !instance || isCentralTenantPermissionsLoading; + const keyInStorageToHoldingsAccsState = ['holdings']; + + if (isUserLacksPermToViewSharedInstance) { + return ( + } + /> + ); + } + + if (isInstanceSharing) { + return ( + } + /> + ); + } + + if (isInstanceLoading) { + return ; + } + + return ( + + { + (!holdingsrecordid && !itemid) ? + ( + + + + ) + : + null + } + + ); + } + + render() { + const { + match: { params: { id } }, + stripes, + onCopy, + updateLocation, + canUseSingleRecordImport, + } = this.props; + const { linkedAuthoritiesLength } = this.state; + const ci = makeConnectedInstance(this.props, stripes.logger); const instance = ci.instance(); @@ -928,30 +995,6 @@ class ViewInstance extends React.Component { handler: (e) => collapseAllSections(e, this.accordionStatusRef), }, ]; - const isInstanceLoading = isLoading || !instance || isCentralTenantPermissionsLoading; - const keyInStorageToHoldingsAccsState = ['holdings']; - - if (isUserLacksPermToViewSharedInstance) { - return ( - } - /> - ); - } - - if (isInstanceSharing) { - return ( - } - /> - ); - } - - if (isInstanceLoading) { - return ; - } return ( @@ -961,34 +1004,7 @@ class ViewInstance extends React.Component { isWithinScope={checkScope} scope={document.body} > - - { - (!holdingsrecordid && !itemid) ? - ( - - - - ) - : - null - } - - + {this.renderInstanceDetails(data, instance)} {this.state.afterCreate && !isEmpty(instance) &&