From b56b7031823d3c98759283f2909c62ccd350a560 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 19 Apr 2021 17:33:14 +0800 Subject: [PATCH] feat: add useEvent --- .../uni-components/src/helpers/useEvent.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 packages/uni-components/src/helpers/useEvent.ts diff --git a/packages/uni-components/src/helpers/useEvent.ts b/packages/uni-components/src/helpers/useEvent.ts new file mode 100644 index 000000000..9d32d6831 --- /dev/null +++ b/packages/uni-components/src/helpers/useEvent.ts @@ -0,0 +1,44 @@ +import { Ref, SetupContext } from 'vue' + +type EventDetail = Record + +export function useCustomEvent(ref: Ref, emit: SetupContext['emit']) { + return (name: string, evt: Event, detail?: EventDetail) => { + emit( + name, + normalizeCustomEvent(name, evt, ref.value as HTMLElement, detail || {}) + ) + } +} + +function normalizeDataset(el: HTMLElement) { + return el.dataset +} + +function normalizeTarget(el: HTMLElement): WechatMiniprogram.Target { + const { id, tagName, offsetTop, offsetLeft } = el + return { + id, + tagName, + dataset: normalizeDataset(el), + offsetTop, + offsetLeft, + } +} + +function normalizeCustomEvent( + name: string, + domEvt: Event, + el: HTMLElement, + detail: EventDetail +) { + const target = normalizeTarget(el) + const evt: WechatMiniprogram.CustomEvent = { + type: detail.type || name, + timeStamp: domEvt.timeStamp || 0, + target, + currentTarget: target, + detail, + } + return evt +} -- GitLab