UNPKG

bootstrap-vue-3

Version:

Early (but lovely) implementation of Vue 3, Bootstrap 5 and Typescript

76 lines (68 loc) 2.15 kB
import {Component} from 'vue' import {readonlyDescriptor} from './object' /** * @external */ export default class BvEvent { cancelable = true componentId: string | null = null defaultPrevented = false nativeEvent: any = null preventDefault: () => void relatedTarget: any = null target: any = null eventType = '' vueTarget: Component | null = null constructor(eventType: string, eventInit = {}) { // Start by emulating native Event constructor if (!eventType) { /* istanbul ignore next */ throw new TypeError( `Failed to construct '${this.constructor.name}'. 1 argument required, ${arguments.length} given.` ) } // Merge defaults first, the eventInit, and the type last // so, it can't be overwritten // TODO: Find a better way to avoid the original error... // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore Object.assign(this, BvEvent.Defaults, this.constructor.Defaults, eventInit, {eventType}) // Freeze some props as readonly, but leave them enumerable Object.defineProperties(this, { type: readonlyDescriptor(), cancelable: readonlyDescriptor(), nativeEvent: readonlyDescriptor(), target: readonlyDescriptor(), relatedTarget: readonlyDescriptor(), vueTarget: readonlyDescriptor(), componentId: readonlyDescriptor(), }) // Create a private variable using closure scoping let defaultPrevented = false // Recreate preventDefault method. One way setter this.preventDefault = function preventDefault() { if (this.cancelable) { defaultPrevented = true } } // Create `defaultPrevented` publicly accessible prop that // can only be altered by the preventDefault method Object.defineProperty(this, 'defaultPrevented', { enumerable: true, get() { return defaultPrevented }, }) } static get Defaults() { return { eventType: '', cancelable: true, nativeEvent: null, target: null, relatedTarget: null, vueTarget: null, componentId: null, } } }