@cainiaofe/cn-ui-m-lowcode
Version:
73 lines (65 loc) • 1.78 kB
text/typescript
import { useEffect, useState } from 'react';
import { dataOriginRequest, dataOriginStatic } from '@/common/util/const';
import { calculateTextExprValue } from '@/common/util/util';
import { makeRequest } from '@/common/manager/request';
export function useData(config) {
const [data, setData] = useState();
const { dataFrom, _context, isDesign, designMockData } = config || {};
const { dataOrigin, dataSource, requestConfig } = dataFrom || {};
const calculateData = async () => {
if (dataOrigin === dataOriginStatic) {
return calculateTextExprValue(dataSource, {
recordDataSource: {},
state: _context?.state,
});
} else if (dataOrigin === dataOriginRequest) {
return makeRequest({
buttonConfig: {
options: {
requestConfig,
},
},
recordDataSource: {},
state: _context?.state,
needSuccessToast: false,
_context,
})
.then((res) => {
return res?.data;
})
.catch(() => {
return undefined;
});
}
};
useEffect(() => {
async function fetchData() {
const tempData = await calculateData();
if (tempData) {
setData(tempData);
} else if (isDesign && designMockData) {
setData(designMockData);
}
}
fetchData();
}, []);
useEffect(() => {
if (isDesign) {
if (dataFrom?.dataOrigin === dataOriginStatic) {
const p = calculateData();
p.then((res) => {
if (res) {
setData(res);
} else if (isDesign && designMockData) {
setData(designMockData);
}
});
}
}
}, [dataFrom?.dataSource]);
return {
data,
setData,
calculateData,
};
}