@knockout-js/org
Version:
Knockout组织相关组件
77 lines (76 loc) • 2.74 kB
JavaScript
import { getDictItems } from "@knockout-js/api";
import { useAppCode } from "@knockout-js/layout/esm/components/provider";
import { useEffect, useState } from "react";
let timeoutFn = undefined, isLoad = false;
const distData = {}, distDataChangeEvent = 'distDataChangeEvent', collectRefCodes = [];
/**
* 用来处理缓存字典项列表
* @returns
*/ export const useDistItems = (dictCode, appCode, dataSource)=>{
var _ref;
const refCode = `${(_ref = appCode !== null && appCode !== void 0 ? appCode : useAppCode()) !== null && _ref !== void 0 ? _ref : ''}:${dictCode}`;
var _distData_refCode;
const [items, setItems] = useState((_distData_refCode = distData[refCode]) !== null && _distData_refCode !== void 0 ? _distData_refCode : []);
/**
* 通过列表设置存储
* @param list
*/ const setDistItems = (list)=>{
const refCodes = [
...new Set(list.map((item)=>item.refCode))
];
refCodes.forEach((code)=>{
if (code) {
distData[code] = list.filter((item)=>item.refCode == code);
}
});
document.dispatchEvent(new CustomEvent(distDataChangeEvent));
};
/**
* 刷新列表接口
*/ const reloadDistItems = async ()=>{
const result = await getDictItems(refCode, true);
if (result.length) {
setDistItems(result);
}
};
useEffect(()=>{
var _dataSource;
if ((_dataSource = dataSource) === null || _dataSource === void 0 ? void 0 : _dataSource.length) {
setDistItems(dataSource);
} else {
if (!collectRefCodes.includes(refCode)) {
collectRefCodes.push(refCode);
isLoad = true;
}
if (isLoad) {
clearTimeout(timeoutFn);
timeoutFn = setTimeout(()=>{
getDictItems(collectRefCodes).then((result)=>{
if (result.length) {
setDistItems(result);
}
isLoad = false;
});
}, 100);
}
}
}, [
refCode,
dataSource
]);
useEffect(()=>{
const handleChange = ()=>{
var _distData_refCode;
setItems((_distData_refCode = distData[refCode]) !== null && _distData_refCode !== void 0 ? _distData_refCode : []);
};
document.addEventListener(distDataChangeEvent, handleChange);
return ()=>{
document.removeEventListener(distDataChangeEvent, handleChange);
};
}, []);
return [
items,
reloadDistItems
];
};
//# sourceMappingURL=index.js.map