From 6c895759462b5103efcff8887c9b43a33211b23f Mon Sep 17 00:00:00 2001 From: neverland Date: Tue, 16 Feb 2021 13:16:24 +0800 Subject: [PATCH] types(Popover): use tsx (#8166) --- package.json | 2 +- src/popover/{index.js => index.tsx} | 69 +++++++++++++++++++++-------- src/popup/index.tsx | 2 +- yarn.lock | 8 ++-- 4 files changed, 57 insertions(+), 24 deletions(-) rename src/popover/{index.js => index.tsx} (70%) diff --git a/package.json b/package.json index 662c006f7..9e10bb5c6 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@babel/runtime": "7.x", "@vant/icons": "^1.5.2", "@vant/lazyload": "^1.0.2", - "@vant/popperjs": "^1.0.2", + "@vant/popperjs": "^1.0.4", "@vant/use": "^1.0.5" }, "peerDependencies": { diff --git a/src/popover/index.js b/src/popover/index.tsx similarity index 70% rename from src/popover/index.js rename to src/popover/index.tsx index c228ef67c..a3e6e64ce 100644 --- a/src/popover/index.js +++ b/src/popover/index.tsx @@ -1,8 +1,16 @@ -import { ref, watch, nextTick, onMounted, onBeforeUnmount } from 'vue'; -import { createPopper, offsetModifier } from '@vant/popperjs'; +import { + ref, + watch, + nextTick, + PropType, + onMounted, + TeleportProps, + onBeforeUnmount, +} from 'vue'; +import { Instance, createPopper, offsetModifier } from '@vant/popperjs'; // Utils -import { createNamespace } from '../utils'; +import { ComponentInstance, createNamespace } from '../utils'; import { BORDER_BOTTOM } from '../utils/constant'; // Composition @@ -14,32 +22,56 @@ import Popup from '../popup'; const [createComponent, bem] = createNamespace('popover'); +export type PopoverTheme = 'light' | 'dark'; +export type PopoverTrigger = 'manual' | 'click'; +export type PopoverPlacement = + | 'top' + | 'top-start' + | 'top-end' + | 'left' + | 'left-start' + | 'left-end' + | 'right' + | 'right-start' + | 'right-end' + | 'bottom' + | 'bottom-start' + | 'bottom-end'; + +export type PopoverAction = { + text: string; + icon?: string; + color?: string; + disabled?: boolean; + className?: string; +}; + export default createComponent({ props: { show: Boolean, overlay: Boolean, offset: { - type: Array, + type: (Array as unknown) as PropType<[number, number]>, default: () => [0, 8], }, theme: { - type: String, + type: String as PropType, default: 'light', }, trigger: { - type: String, + type: String as PropType, default: 'click', }, actions: { - type: Array, + type: Array as PropType, default: () => [], }, placement: { - type: String, + type: String as PropType, default: 'bottom', }, teleport: { - type: [String, Object], + type: [String, Object] as PropType, default: 'body', }, closeOnClickAction: { @@ -51,12 +83,13 @@ export default createComponent({ emits: ['select', 'touchstart', 'update:show'], setup(props, { emit, slots, attrs }) { - let popper; - const wrapperRef = ref(); - const popoverRef = ref(); + let popper: Instance | null; + + const wrapperRef = ref(); + const popoverRef = ref(); const createPopperInstance = () => { - return createPopper(wrapperRef.value, popoverRef.value.popupRef.value, { + return createPopper(wrapperRef.value!, popoverRef.value!.popupRef.value, { placement: props.placement, modifiers: [ { @@ -92,7 +125,7 @@ export default createComponent({ }); }; - const toggle = (value) => { + const toggle = (value: boolean) => { emit('update:show', value); }; @@ -102,12 +135,12 @@ export default createComponent({ } }; - const onTouchstart = (event) => { + const onTouchstart = (event: TouchEvent) => { event.stopPropagation(); emit('touchstart', event); }; - const onClickAction = (action, index) => { + const onClickAction = (action: PopoverAction, index: number) => { if (action.disabled) { return; } @@ -123,7 +156,7 @@ export default createComponent({ toggle(false); }; - const renderAction = (action, index) => { + const renderAction = (action: PopoverAction, index: number) => { const { icon, text, color, disabled, className } = action; return (