UNPKG

@revolist/revogrid

Version:

Virtual reactive data grid spreadsheet component - RevoGrid.

93 lines (92 loc) 3.33 kB
/*! * Built by Revolist OU ❤️ */ import { h } from "@stencil/core"; /** * Base layer for plugins * Provide minimal starting core for plugins to work * Extend this class to create plugin */ export class BasePlugin { constructor(revogrid, providers) { this.revogrid = revogrid; this.providers = providers; this.h = h; this.subscriptions = {}; } /** * * @param eventName - event name to subscribe to in revo-grid component (e.g. 'beforeheaderclick') * @param callback - callback function for event */ addEventListener(eventName, callback) { this.revogrid.addEventListener(eventName, callback); this.subscriptions[eventName] = callback; } /** * Subscribe to property change in revo-grid component * You can return false in callback to prevent default value set * * @param prop - property name * @param callback - callback function * @param immediate - trigger callback immediately with current value */ watch(prop, callback, { immediate } = { immediate: false }) { var _a; const nativeValueDesc = Object.getOwnPropertyDescriptor(this.revogrid, prop) || Object.getOwnPropertyDescriptor(this.revogrid.constructor.prototype, prop); // Overwrite property descriptor for this instance Object.defineProperty(this.revogrid, prop, { configurable: true, enumerable: (_a = nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.enumerable) !== null && _a !== void 0 ? _a : true, set(val) { var _a; const keepDefault = callback(val); if (keepDefault === false) { return; } // Continue with native behavior return (_a = nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.set) === null || _a === void 0 ? void 0 : _a.call(this, val); }, get() { var _a; // Continue with native behavior return (_a = nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.get) === null || _a === void 0 ? void 0 : _a.call(this); }, }); if (immediate) { callback(nativeValueDesc === null || nativeValueDesc === void 0 ? void 0 : nativeValueDesc.value); } } /** * Remove event listener * @param eventName */ removeEventListener(eventName) { this.revogrid.removeEventListener(eventName, this.subscriptions[eventName]); delete this.subscriptions[eventName]; } /** * Emit event from revo-grid component * Event can be cancelled by calling event.preventDefault() in callback */ emit(eventName, detail) { const event = new CustomEvent(eventName, { detail, cancelable: true }); this.revogrid.dispatchEvent(event); return event; } /** * Clear all subscriptions */ clearSubscriptions() { for (let type in this.subscriptions) { this.removeEventListener(type); } } /** * Destroy plugin and clear all subscriptions */ destroy() { this.clearSubscriptions(); } }