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) &&