Skip to content

Commit

Permalink
UIIN-2682: Handle errors when sharing local instances failed
Browse files Browse the repository at this point in the history
  • Loading branch information
mariia-aloshyna committed Nov 9, 2023
1 parent 8354df7 commit ba8c285
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 55 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
123 changes: 68 additions & 55 deletions src/ViewInstance.js
Original file line number Diff line number Diff line change
Expand Up @@ -443,20 +443,23 @@ class ViewInstance extends React.Component {
this.setState({ isImportRecordModalOpened: false });
}

showUnsuccessfulShareInstanceCallout = (instanceTitle) => {
this.calloutRef.current?.sendCallout({
type: 'error',
message: <FormattedMessage id="ui-inventory.shareLocalInstance.toast.unsuccessful" values={{ instanceTitle }} />,
});
}

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: <FormattedMessage id="ui-inventory.shareLocalInstance.toast.unsuccessful" values={{ instanceTitle }} />,
});
clearInterval(this.intervalId);
reject(error);
};
Expand Down Expand Up @@ -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();
Expand All @@ -512,11 +515,9 @@ class ViewInstance extends React.Component {
this.setState({
isUnlinkAuthoritiesModalOpen: false,
isShareLocalInstanceModalOpen: false,
isInstanceSharing: false,
});
this.calloutRef.current?.sendCallout({
type: 'error',
message: <FormattedMessage id="ui-inventory.shareLocalInstance.toast.unsuccessful" values={{ instanceTitle }} />,
});
this.showUnsuccessfulShareInstanceCallout(instanceTitle);
});
}

Expand Down Expand Up @@ -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: <FormattedMessage id="ui-inventory.communicationProblem" />,
});
});
}

Expand Down Expand Up @@ -931,27 +939,59 @@ class ViewInstance extends React.Component {
const isInstanceLoading = isLoading || !instance || isCentralTenantPermissionsLoading;
const keyInStorageToHoldingsAccsState = ['holdings'];

if (isUserLacksPermToViewSharedInstance) {
return (
<InstanceWarningPane
onClose={onClose}
messageBannerText={<FormattedMessage id="ui-inventory.warning.instance.accessSharedInstance" />}
/>
);
}
const getDetails = (data) => {
if (isUserLacksPermToViewSharedInstance) {
return (
<InstanceWarningPane
onClose={onClose}
messageBannerText={<FormattedMessage id="ui-inventory.warning.instance.accessSharedInstance" />}
/>
);
}

if (isInstanceSharing) {
return (
<InstanceWarningPane
onClose={onClose}
messageBannerText={<FormattedMessage id="ui-inventory.warning.instance.sharingLocalInstance" />}
/>
);
}

if (isInstanceLoading) {
return <InstanceLoadingPane onClose={onClose} />;
}

if (isInstanceSharing) {
return (
<InstanceWarningPane
<InstanceDetails
id="pane-instancedetails"
onClose={onClose}
messageBannerText={<FormattedMessage id="ui-inventory.warning.instance.sharingLocalInstance" />}
/>
actionMenu={this.createActionMenuGetter(instance, data)}
instance={instance}
tagsEnabled={tagsEnabled}
ref={this.accordionStatusRef}
userTenantPermissions={this.state.userTenantPermissions}
isShared={isShared}
>
{
(!holdingsrecordid && !itemid) ?
(
<MoveItemsContext>
<HoldingsListContainer
instance={instance}
draggable={this.state.isItemsMovement}
tenantId={okapi.tenant}
pathToAccordionsState={keyInStorageToHoldingsAccsState}
droppable
/>
</MoveItemsContext>
)
:
null
}
</InstanceDetails>
);
}

if (isInstanceLoading) {
return <InstanceLoadingPane onClose={onClose} />;
}
};

return (
<DataContext.Consumer>
Expand All @@ -961,34 +1001,7 @@ class ViewInstance extends React.Component {
isWithinScope={checkScope}
scope={document.body}
>
<InstanceDetails
id="pane-instancedetails"
onClose={onClose}
actionMenu={this.createActionMenuGetter(instance, data)}
instance={instance}
tagsEnabled={tagsEnabled}
ref={this.accordionStatusRef}
userTenantPermissions={this.state.userTenantPermissions}
isShared={isShared}
>
{
(!holdingsrecordid && !itemid) ?
(
<MoveItemsContext>
<HoldingsListContainer
instance={instance}
draggable={this.state.isItemsMovement}
tenantId={okapi.tenant}
pathToAccordionsState={keyInStorageToHoldingsAccsState}
droppable
/>
</MoveItemsContext>
)
:
null
}
</InstanceDetails>

{getDetails(data)}
<Callout ref={this.calloutRef} />

{this.state.afterCreate && !isEmpty(instance) &&
Expand Down

0 comments on commit ba8c285

Please sign in to comment.