@hf-chimera/store
Version:
Cross-end reactivity API
92 lines (90 loc) • 2.74 kB
JavaScript
const require_params = require('../params-C5dnCvJr.cjs');
require('../defaults-C48gY1ow.cjs');
require('../src-YxpDmKvq.cjs');
require('../qb-D6vPK6P0.cjs');
let vue = require("vue");
vue = require_params.__toESM(vue);
//#region packages/adapters/vue/composables.ts
const isFunction = (value) => typeof value === "function";
const toValue = (value) => isFunction(value) ? value() : (0, vue.isRef)(value) ? value.value : value;
const CHIMERA_COLLECTION_UPDATE_EVENTS = [
"ready",
"updated",
"selfUpdated",
"selfItemCreated",
"itemAdded",
"itemUpdated",
"selfItemUpdated",
"itemDeleted",
"selfItemDeleted",
"error"
];
const CHIMERA_ITEM_UPDATE_EVENTS = [
"initialized",
"selfCreated",
"ready",
"updated",
"selfUpdated",
"deleted",
"selfDeleted",
"error"
];
const createChimeraComposables = (store) => {
const useChimeraRepository = (entityName) => (0, vue.computed)(() => store.from(toValue(entityName)));
return {
useChimeraStore: () => store,
useChimeraRepository,
useChimeraCollection: (entityName, params) => {
const repository = useChimeraRepository(entityName);
const normalizedParams = (0, vue.computed)(() => require_params.normalizeParams(toValue(params)));
const collection = (0, vue.computed)(() => repository.value.getCollection(normalizedParams.value));
return (0, vue.customRef)((track, trigger) => {
(0, vue.watch)(collection, (collection$1, _, onCleanup) => {
const handler = () => trigger();
CHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => {
collection$1.on(event, handler);
});
onCleanup(() => CHIMERA_COLLECTION_UPDATE_EVENTS.forEach((event) => {
collection$1.off(event, handler);
}));
}, { immediate: true });
return {
get() {
track();
return collection.value;
},
set() {
console.warn("ChimeraCollectionRef is readonly");
}
};
});
},
useChimeraItem: (entityName, id, meta) => {
const repository = useChimeraRepository(entityName);
const item = (0, vue.computed)(() => repository.value.getItem(toValue(id), toValue(meta)));
return (0, vue.customRef)((track, trigger) => {
(0, vue.watch)(item, (item$1, _, onCleanup) => {
const handler = () => trigger();
CHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => {
item$1.on(event, handler);
});
onCleanup(() => CHIMERA_ITEM_UPDATE_EVENTS.forEach((event) => {
item$1.off(event, handler);
}));
}, { immediate: true });
return {
get() {
track();
return item.value;
},
set() {
console.warn("ChimeraItemRef is readonly");
}
};
});
}
};
};
//#endregion
exports.createChimeraComposables = createChimeraComposables;
//# sourceMappingURL=vue.cjs.map