vue-admin-core
Version:
A Component Library for Vue 3
59 lines (56 loc) • 1.63 kB
JavaScript
import { isField } from '@formily/core';
import '../../components/config-provider/index.mjs';
import '../useRequest/index.mjs';
import { watch, toValue } from 'vue';
import { isBoolean } from 'lodash-es';
import { useGlobalConfig } from '../../components/config-provider/src/hooks/use-global-config.mjs';
import useRequest from '../useRequest/src/useRequest.mjs';
const useRemote = ({
form,
target
}, service, options) => {
const {
pagination,
...reset
} = options || {};
const config = useGlobalConfig();
const request = useRequest(service, reset);
let totalKey = config.value.totalKey || "totalElements";
let listKey = config.value.listKey || "content";
if (!isBoolean(pagination) && pagination) {
totalKey = pagination.totalKey;
listKey = pagination.listKey;
}
watch(request.loading, (loading) => {
toValue(form).query(target).take((field) => {
if (isField(field))
field.setLoading(loading);
});
}, {
immediate: true
});
watch([request.data], ([data]) => {
if (!data)
return;
const field = toValue(form).query(target).take();
if (!field)
return;
if (!isField(field))
return;
if (field.componentType === "TableSelect" && pagination) {
field.setDataSource(data[listKey]);
field.setComponentProps({
total: data[totalKey],
// @ts-ignore
onCurrentChange: (value) => request.run({
[config.value.currentPageKey]: value
})
});
} else {
field.setDataSource(data);
}
});
return request;
};
export { useRemote };
//# sourceMappingURL=useRemote.mjs.map