Add removeInvitation to the invitation screen
This commit is contained in:
@@ -67,6 +67,7 @@ export class AppService extends EventEmitter<AppEventMap> {
|
||||
{
|
||||
onUpdated: (invitation: XOInvitation) => void;
|
||||
onStatusChanged: (status: string) => void;
|
||||
onRemoved: () => void;
|
||||
}
|
||||
>();
|
||||
|
||||
@@ -241,13 +242,25 @@ export class AppService extends EventEmitter<AppEventMap> {
|
||||
invitationIdentifier,
|
||||
});
|
||||
};
|
||||
const onRemoved = () => {
|
||||
this.detachInvitationListeners(invitationIdentifier);
|
||||
this.invitations.splice(this.invitations.indexOf(invitation), 1);
|
||||
this.bumpInvitationRevision(invitationIdentifier);
|
||||
this.emit("invitation-removed", invitation);
|
||||
this.emit("wallet-state-changed", {
|
||||
reason: "invitation-removed",
|
||||
invitationIdentifier: invitationIdentifier,
|
||||
});
|
||||
};
|
||||
|
||||
invitation.on("invitation-updated", onUpdated);
|
||||
invitation.on("invitation-status-changed", onStatusChanged);
|
||||
invitation.on("invitation-removed", onRemoved);
|
||||
|
||||
this.invitationEventCleanup.set(invitationIdentifier, {
|
||||
onUpdated,
|
||||
onStatusChanged,
|
||||
onRemoved,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ export type { ResolvedInvitationData } from "../utils/resolve-invitation-data.js
|
||||
export type InvitationEventMap = {
|
||||
"invitation-updated": XOInvitation;
|
||||
"invitation-status-changed": string;
|
||||
"invitation-removed": void;
|
||||
error: Error;
|
||||
};
|
||||
|
||||
@@ -889,4 +890,21 @@ export class Invitation extends EventEmitter<InvitationEventMap> {
|
||||
|
||||
return totalSats;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the invitation from the Local SQLite db as well as the Engine's internal DB
|
||||
* NOTE: This uses methods that are marked "DANGEROUSLY" inside the engine and behaviour may change
|
||||
*/
|
||||
public async delete() {
|
||||
// Remove the invitation from our local db
|
||||
this.storage.remove(this.data.invitationIdentifier);
|
||||
|
||||
// Remove the invitation from the engine's internal db
|
||||
await this.engine.DANGEROUS_deleteStoredInvitation(this.data.invitationIdentifier);
|
||||
|
||||
this.emit("invitation-removed", this.data.invitationIdentifier);
|
||||
|
||||
// Update the status of the invitation
|
||||
await this.updateStatus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ const actionItems: ListItemData<string>[] = [
|
||||
{ key: 'sign', label: 'Sign Transaction', value: 'sign' },
|
||||
{ key: 'broadcast', label: 'Broadcast Transaction', value: 'broadcast' },
|
||||
{ key: 'copy', label: 'Copy Invitation ID', value: 'copy' },
|
||||
{ key: 'delete', label: 'Delete Invitation', value: 'delete' },
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -354,6 +355,28 @@ export function InvitationScreen(): React.ReactElement {
|
||||
}
|
||||
}, [selectedInvitation, showInfo, showError, setStatus]);
|
||||
|
||||
/**
|
||||
* Delete the selected invitation from both our SQLite db and the engine's db
|
||||
* NOTE: This uses methods marked "DANGEROUSLY" internally, and may change in the future.
|
||||
*/
|
||||
const deleteInvitation = useCallback(async () => {
|
||||
if (!selectedInvitation) return;
|
||||
|
||||
setIsLoading(true)
|
||||
setStatus('Removing invitation...')
|
||||
|
||||
try {
|
||||
await selectedInvitation.delete();
|
||||
showInfo('Invitation successfully deleted')
|
||||
setStatus('Ready')
|
||||
} catch (error) {
|
||||
showError(`Failed to delete invitation: ${error instanceof Error ? error.message : String(error)}`)
|
||||
} finally {
|
||||
setIsLoading(false)
|
||||
setStatus('Ready')
|
||||
}
|
||||
})
|
||||
|
||||
const copyId = useCallback(async () => {
|
||||
if (!selectedInvitation) {
|
||||
showError('No invitation selected');
|
||||
@@ -509,6 +532,9 @@ export function InvitationScreen(): React.ReactElement {
|
||||
case 'broadcast':
|
||||
broadcastTransaction();
|
||||
break;
|
||||
case 'delete':
|
||||
deleteInvitation();
|
||||
break;
|
||||
}
|
||||
}, [selectedInvitation, copyId, acceptInvitation, fillRequirements, signInvitation, broadcastTransaction, navigate]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user