overmind-vue
Version:
Functional actions
124 lines • 5.03 kB
JavaScript
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
;