UNPKG

overmind-vue

Version:
124 lines 5.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHooks = exports.createReactionHook = exports.createEffectsHook = exports.createActionsHook = exports.createStateHook = exports.withOvermind = void 0; const overmind_1 = require("overmind"); const vue_1 = require("vue"); const IS_PRODUCTION = overmind_1.ENVIRONMENT === 'production'; let nextComponentId = 0; const withOvermind = (instance, Component) => { return (0, vue_1.defineComponent)({ setup() { (0, vue_1.provide)('overmind', instance); }, render() { return (0, vue_1.h)(Component); }, }); }; exports.withOvermind = withOvermind; function createStateHook() { const componentId = nextComponentId++; let componentInstanceId = 0; return ((cb) => { const overmindInstance = (0, vue_1.inject)('overmind'); if (overmindInstance.mode.mode === overmind_1.MODE_SSR) { return cb ? cb(overmindInstance.state) : overmindInstance.state; } else { const overmindRef = (0, vue_1.ref)({}); const flushIds = (0, vue_1.ref)(-1); const { value } = overmindRef; const state = (0, vue_1.ref)(cb ? cb(overmindInstance.state) : overmindInstance.state); if (!value.tree) { value.tree = overmindInstance.proxyStateTreeInstance.getTrackStateTree(); value.componentInstanceId = componentInstanceId++; value.onUpdate = (_, __, flushId) => { value.currentFlushId = flushId; value.isUpdating = true; flushIds.value = flushId; state.value = Object.assign({}, (cb ? cb(overmindInstance.state) : overmindInstance.state)); // this.$forceUpdate() }; value.isUpdating = false; } (0, vue_1.onBeforeUpdate)(function () { if (overmindInstance.mode.mode === overmind_1.MODE_SSR) return; value.tree.track(value.onUpdate); }); (0, vue_1.onRenderTracked)(function () { if (IS_PRODUCTION) { return; } if (overmindInstance.isUpdating) { overmindInstance.eventHub.emitAsync(overmind_1.EventType.COMPONENT_UPDATE, { componentId, componentInstanceId: value.componentInstanceId, name: '', flushId: value.currentFlushId, paths: Array.from(value.tree.pathDependencies), }); value.isUpdating = false; } }); (0, vue_1.onMounted)(() => { if (IS_PRODUCTION || overmindInstance.mode.mode === overmind_1.MODE_SSR) return; value.tree.stopTracking(); overmindInstance.eventHub.emitAsync(overmind_1.EventType.COMPONENT_ADD, { componentId, componentInstanceId: value.componentInstanceId, name: '', paths: Array.from(value.tree.pathDependencies), }); }); (0, vue_1.onBeforeUnmount)(() => { if (overmindInstance.mode.mode === overmind_1.MODE_SSR) return; overmindInstance.proxyStateTreeInstance.disposeTree(value.tree); if (IS_PRODUCTION) { return; } overmindInstance.eventHub.emitAsync(overmind_1.EventType.COMPONENT_REMOVE, { componentId, componentInstanceId: value.componentInstanceId, name: '', // this.$options.name || '', }); }); value.tree.track(value.onUpdate); return state; } }); } exports.createStateHook = createStateHook; function createActionsHook() { return ((cb) => { const overmindInstance = (0, vue_1.inject)('overmind'); return cb ? cb(overmindInstance.actions) : overmindInstance.actions; }); } exports.createActionsHook = createActionsHook; function createEffectsHook() { return ((cb) => { const overmindInstance = (0, vue_1.inject)('overmind'); return cb ? cb(overmindInstance.effects) : overmindInstance.effects; }); } exports.createEffectsHook = createEffectsHook; function createReactionHook() { return () => { const overmindInstance = (0, vue_1.inject)('overmind'); return overmindInstance.reaction; }; } exports.createReactionHook = createReactionHook; function createHooks() { return { state: createStateHook(), actions: createActionsHook(), effects: createEffectsHook(), reaction: createReactionHook(), }; } exports.createHooks = createHooks; //# sourceMappingURL=vue3.js.map