vue-hooks-env
Version:
TypeScript and TSX Env for Vue Composition Api
71 lines (70 loc) • 2.48 kB
JavaScript
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
import { onMounted, onUpdated } from '@vue/composition-api';
var guid = 1;
export function HC(setup, props, name) {
if (props === void 0) { props = []; }
if (name === void 0) { name = 'HookComponent'; }
var realSetup = function (props, ctx) {
var map = {};
var cache = {};
var update = function () {
Object.keys(map).forEach(function (key) {
if (cache[key] !== ctx.refs[key]) {
var v = cache[key] = ctx.refs[key];
var ref = map[key];
if (typeof ref === 'function') {
ref(v);
}
else if (ref != null) {
ref.value = v;
}
}
});
};
onMounted(update);
onUpdated(update);
return setup(props, {
attrs: ctx.attrs,
listeners: ctx.listeners,
slots: ctx.slots,
bindRefKey: function (ref) {
var key = 'hc-ref-' + guid++;
map[key] = ref;
return key;
},
renderSlot: function (key, fallback) {
var _a;
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
if (ctx.slots[key]) {
return (_a = ctx.slots)[key].apply(_a, args);
}
return fallback == null ? [] : Array.isArray(fallback) ? fallback : [fallback];
},
emit: function (event) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var key = event;
var ev = key.charAt(2).toLowerCase() + key.slice(3);
ctx.emit.apply(ctx, __spreadArrays([ev], args));
}
});
};
var options = {
props: props,
setup: realSetup,
name: name,
inheritAttrs: false
};
return options;
}