From 7d8445805c637ae46f2b370df9cadb58ad7ea195 Mon Sep 17 00:00:00 2001 From: Abrahem Alhofe Date: Mon, 13 Jun 2022 14:55:41 +0200 Subject: [PATCH] feat: fire component's events Promised fires 'resolved' event when the promise is resolved, fires 'rejected' event when the promise is rejected and fires 'pending' event when pending delay time is elapsed. close #311 --- src/Promised.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Promised.ts b/src/Promised.ts index 4fae618..b4ea443 100644 --- a/src/Promised.ts +++ b/src/Promised.ts @@ -1,3 +1,4 @@ +import { watch } from 'vue' import { defineComponent, isVue3, @@ -24,13 +25,23 @@ export const PromisedImpl = /*#__PURE__*/ defineComponent({ default: 200, }, }, - - setup(props, { slots }) { + emits: ['resolved', 'rejected', 'pending'], + setup(props, { slots, emit, attrs }) { const propsAsRefs = toRefs(props) const promiseState = reactive( usePromise(propsAsRefs.promise, propsAsRefs.pendingDelay) ) + watch(promiseState, (promiseState) => + promiseState.isRejected + ? emit('rejected', promiseState.error) + : !promiseState.isPending + ? emit('resolved', promiseState.data) + : promiseState.isDelayElapsed + ? emit('pending', promiseState.data) + : null + ) + return () => { if ('combined' in slots) { return slots.combined!(promiseState)