UNPKG

@knockout-js/org

Version:
77 lines (76 loc) 2.74 kB
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