aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/mui/handlers.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/mui/handlers.ts')
-rw-r--r--packages/taler-wallet-webextension/src/mui/handlers.ts40
1 files changed, 34 insertions, 6 deletions
diff --git a/packages/taler-wallet-webextension/src/mui/handlers.ts b/packages/taler-wallet-webextension/src/mui/handlers.ts
index 655fceef9..61786742f 100644
--- a/packages/taler-wallet-webextension/src/mui/handlers.ts
+++ b/packages/taler-wallet-webextension/src/mui/handlers.ts
@@ -14,23 +14,51 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { AmountJson } from "@gnu-taler/taler-util";
-import { TalerError } from "@gnu-taler/taler-wallet-core";
export interface TextFieldHandler {
- onInput?: (value: string) => Promise<void>;
+ onInput?: SafeHandler<string>;
value: string;
error?: string;
}
export interface AmountFieldHandler {
- onInput?: (value: AmountJson) => Promise<void>;
+ onInput?: SafeHandler<AmountJson>;
value: AmountJson;
error?: string;
}
+declare const __safe_handler: unique symbol;
+export type SafeHandler<T> = {
+ <Req extends T>(req: Req): Promise<void>;
+ (): Promise<void>;
+ [__safe_handler]: true;
+};
+
+export function withSafe<T>(
+ handler: (p: T) => Promise<void>,
+ onError: (e: Error) => void,
+): SafeHandler<T> {
+ const sh = async function (p: T): Promise<void> {
+ try {
+ await handler(p);
+ } catch (e) {
+ if (e instanceof Error) {
+ onError(e);
+ } else {
+ onError(new Error(String(e)));
+ }
+ }
+ };
+ return sh as SafeHandler<T>;
+}
+
+export const nullFunction = async function (): Promise<void> {
+ //do nothing
+} as SafeHandler<void>;
+
export interface ButtonHandler {
- onClick?: () => Promise<void>;
- error?: TalerError;
+ onClick?: SafeHandler<void>;
+ // error?: TalerError;
}
export interface ToggleHandler {
@@ -39,7 +67,7 @@ export interface ToggleHandler {
}
export interface SelectFieldHandler {
- onChange?: (value: string) => Promise<void>;
+ onChange?: SafeHandler<string>;
error?: string;
value: string;
isDirty?: boolean;