@oiij/naive-ui
Version:
Some Composable Functions And Components for Vue 3
101 lines (99 loc) • 2.75 kB
JavaScript
import { createEventHook } from "@vueuse/core";
import { computed, ref } from "vue";
import useRequest from "vue-hooks-plus/es/useRequest";
//#region src/composables/useDataRequest.ts
function useDataRequest(api, options) {
const { defaultParams, manual, fields, requestOptions, requestPlugins } = options ?? {};
const _fields = {
page: "page",
pageSize: "pageSize",
list: "list",
count: "count",
...fields
};
const pagination = ref({
page: defaultParams?.[_fields.page] ?? 1,
pageSize: defaultParams?.[_fields.pageSize] ?? 10,
itemCount: 0
});
const onBeforeEvent = createEventHook();
const onSuccessEvent = createEventHook();
const onErrorEvent = createEventHook();
const onFinallyEvent = createEventHook();
const { loading, data, error, params, run, runAsync, refresh, refreshAsync, cancel, mutate } = useRequest(api, {
defaultParams: [{
[_fields.page]: pagination.value.page,
[_fields.pageSize]: pagination.value.pageSize,
...defaultParams
}],
manual,
...requestOptions,
onBefore: (params$1) => {
requestOptions?.onBefore?.(params$1);
onBeforeEvent.trigger(params$1);
},
onSuccess: (data$1, params$1) => {
requestOptions?.onSuccess?.(data$1, params$1);
onSuccessEvent.trigger(data$1, params$1);
if (_fields.page in params$1?.[0]) {
const _page = Number(params$1?.[0][_fields.page]);
if (!Number.isNaN(_page)) pagination.value.page = _page;
}
if (_fields.pageSize in params$1?.[0]) {
const _pageSize = Number(params$1?.[0][_fields.pageSize]);
if (!Number.isNaN(_pageSize)) pagination.value.pageSize = _pageSize;
}
if (_fields.count in data$1) {
const _count = Number(data$1[_fields.count]);
if (!Number.isNaN(_count)) pagination.value.itemCount = _count;
}
},
onError: (err, params$1) => {
requestOptions?.onError?.(err, params$1);
onErrorEvent.trigger(err, params$1);
},
onFinally: (params$1, data$1, err) => {
requestOptions?.onFinally?.(params$1, data$1, err);
onFinallyEvent.trigger(params$1, data$1, err);
}
}, requestPlugins);
const list = computed(() => data.value?.[_fields.list] ?? []);
function setParams(_params) {
Object.assign(params.value?.[0], _params);
}
function runParams(_params) {
return run({
...params.value?.[0],
..._params
});
}
function runParamsAsync(_params) {
return runAsync({
...params.value?.[0],
..._params
});
}
return {
loading,
data,
error,
params,
list,
pagination,
run,
runAsync,
refresh,
refreshAsync,
cancel,
mutate,
setParams,
runParams,
runParamsAsync,
onBefore: onBeforeEvent.on,
onSuccess: onSuccessEvent.on,
onError: onErrorEvent.on,
onFinally: onFinallyEvent.on
};
}
//#endregion
export { useDataRequest };