import { useHover } from '../../helpers/useHover' import { defineBuiltInComponent } from '@dcloudio/uni-components' const OPEN_TYPES = [ 'navigate', 'redirect', 'switchTab', 'reLaunch', 'navigateBack', ] const props = { hoverClass: { type: String, default: 'navigator-hover', }, url: { type: String, default: '', }, openType: { type: String, default: 'navigate', validator(value: unknown) { return Boolean(~OPEN_TYPES.indexOf(value as string)) }, }, delta: { type: Number, default: 1, }, hoverStartTime: { type: [Number, String], default: 50, }, hoverStayTime: { type: [Number, String], default: 600, }, exists: { type: String, default: '', }, hoverStopPropagation: { type: Boolean, default: false, }, } export default /*#__PURE__*/ defineBuiltInComponent({ name: 'Navigator', compatConfig: { MODE: 3, }, props, setup(props, { slots }) { const { hovering, binding } = useHover(props) function onClick($event: MouseEvent) { if (props.openType !== 'navigateBack' && !props.url) { console.error( ' should have url attribute when using navigateTo, redirectTo, reLaunch or switchTab' ) return } switch (props.openType) { case 'navigate': uni.navigateTo({ url: props.url, }) break case 'redirect': uni.redirectTo({ url: props.url, // @ts-ignore exists: props.exists, }) break case 'switchTab': uni.switchTab({ url: props.url, }) break case 'reLaunch': uni.reLaunch({ url: props.url, }) break case 'navigateBack': uni.navigateBack({ delta: props.delta, }) break default: break } } return () => { const { hoverClass } = props const hasHoverClass = props.hoverClass && props.hoverClass !== 'none' return ( {slots.default && slots.default()} ) } }, })