Fix echo handling and show a barebones toast on error

The EchoTransaction was wrongly assuming that it knew better than the caller for when the success condition was met, so the echo marking has been left an exercise for the caller. In this case, we mark when we finally receive the sync with the updated rules.

We also have to cancel previous transactions otherwise if the user mashes buttons we could forever show the toast, and that would be bad.
This commit is contained in:
Travis Ralston 2020-07-29 19:11:24 -06:00
parent 0f1b9937a9
commit 14b0def143
7 changed files with 104 additions and 16 deletions

View file

@ -27,12 +27,17 @@ export enum ContextTransactionState {
export abstract class EchoContext extends Whenable<ContextTransactionState> implements IDestroyable {
private _transactions: EchoTransaction[] = [];
private _state = ContextTransactionState.NotStarted;
public readonly startTime: Date = new Date();
public get transactions(): EchoTransaction[] {
return arrayFastClone(this._transactions);
}
public get state(): ContextTransactionState {
return this._state;
}
public beginTransaction(auditName: string, runFn: RunFn): EchoTransaction {
const txn = new EchoTransaction(auditName, runFn);
this._transactions.push(txn);
@ -48,7 +53,7 @@ export abstract class EchoContext extends Whenable<ContextTransactionState> impl
private checkTransactions = () => {
let status = ContextTransactionState.AllSuccessful;
for (const txn of this.transactions) {
if (txn.status === TransactionStatus.DoneError) {
if (txn.status === TransactionStatus.DoneError || txn.didPreviouslyFail) {
status = ContextTransactionState.PendingErrors;
break;
} else if (txn.status === TransactionStatus.Pending) {
@ -56,6 +61,7 @@ export abstract class EchoContext extends Whenable<ContextTransactionState> impl
// no break as we might hit something which broke
}
}
this._state = status;
this.notifyCondition(status);
};
@ -63,6 +69,7 @@ export abstract class EchoContext extends Whenable<ContextTransactionState> impl
for (const txn of this.transactions) {
txn.destroy();
}
this._transactions = [];
super.destroy();
}
}