mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-10-23 04:52:14 +00:00
* update(c-alert): Add variant 'error' * fix(encryption): Alert decryption error (#652) * feat(c-alert): added title * refactor(composable): mutualized computedCatch --------- Co-authored-by: code2933 <code2933@outlook.com>
23 lines
778 B
TypeScript
23 lines
778 B
TypeScript
import { type Ref, ref, watchEffect } from 'vue';
|
|
|
|
export { computedCatch };
|
|
|
|
function computedCatch<T, D>(getter: () => T, { defaultValue }: { defaultValue: D; defaultErrorMessage?: string }): [Ref<T | D>, Ref<string | undefined>];
|
|
function computedCatch<T, D>(getter: () => T, { defaultValue, defaultErrorMessage = 'Unknown error' }: { defaultValue?: D; defaultErrorMessage?: string } = {}) {
|
|
const error = ref<string | undefined>();
|
|
const value = ref<T | D | undefined>();
|
|
|
|
watchEffect(() => {
|
|
try {
|
|
error.value = undefined;
|
|
value.value = getter();
|
|
}
|
|
catch (err) {
|
|
error.value = err instanceof Error ? err.message : err?.toString() ?? defaultErrorMessage;
|
|
value.value = defaultValue;
|
|
}
|
|
});
|
|
|
|
return [value, error] as const;
|
|
}
|