vue-admin-core
Version:
A Component Library for Vue 3
50 lines (47 loc) • 1.58 kB
JavaScript
import { onMounted, toValue, onUnmounted } from 'vue';
import Fetch from './Fetch.mjs';
import { isEmpty } from 'lodash-es';
function useRequestImplement(service, options = {}, plugins = []) {
const { manual = false, ...rest } = options;
const fetchOptions = {
manual,
...rest
};
const initState = plugins.map((p) => {
var _a;
return (_a = p == null ? void 0 : p.onInit) == null ? void 0 : _a.call(p, fetchOptions);
}).filter(Boolean);
const fetchInstance = new Fetch(
service,
fetchOptions,
Object.assign({}, ...initState)
);
fetchInstance.options = fetchOptions;
fetchInstance.pluginImpls = plugins.map((p) => p(fetchInstance, fetchOptions));
onMounted(() => {
if (!manual) {
let params = toValue(options.defaultParams || []);
if (!isEmpty(toValue(fetchInstance.params))) {
params = toValue(fetchInstance.params);
}
fetchInstance.run(...params);
}
});
onUnmounted(() => {
fetchInstance.cancel();
});
return {
loading: fetchInstance.loading,
data: fetchInstance.data,
error: fetchInstance.error,
params: fetchInstance.params || [],
cancel: fetchInstance.cancel.bind(fetchInstance),
refresh: fetchInstance.refresh.bind(fetchInstance),
refreshAsync: fetchInstance.refreshAsync.bind(fetchInstance),
run: fetchInstance.run.bind(fetchInstance),
runAsync: fetchInstance.runAsync.bind(fetchInstance),
mutate: fetchInstance.mutate.bind(fetchInstance)
};
}
export { useRequestImplement as default };
//# sourceMappingURL=useRequestImplement.mjs.map