@flatbiz/antd
Version:
315 lines (307 loc) • 11.3 kB
JavaScript
/* eslint-disable */
import './../fba-hooks/index.css';
import './index.css';
/*! @flatjs/forge MIT @flatbiz/antd */
import { f as fbaUtils } from '../fba-utils-CusZeveq.js';
import { a as _slicedToArray, b as _objectSpread2 } from '../_rollupPluginBabelHelpers-BspM60Sw.js';
import { fbaHooks } from '../fba-hooks/index.js';
import { classNames } from '@dimjs/utils/class-names/class-names';
import { isDeepEqual } from '@dimjs/lang/is-deep-equal';
import { forwardRef, useState, useRef, useMemo, useImperativeHandle, Fragment } from 'react';
import { useMemoizedFn } from 'ahooks';
import { Result, Button, Spin } from 'antd';
import { getValueOrDefault, toArray, isUndefinedOrNull } from '@flatbiz/utils';
import { jsx, jsxs } from 'react/jsx-runtime';
import '@dimjs/lang/is-array';
import '../use-responsive-point-Bp3D3lZT.js';
var _fbaHooks$createCtx = fbaHooks.createCtx(),
_fbaHooks$createCtx2 = _slicedToArray(_fbaHooks$createCtx, 2),
useLocalLoadingCtx = _fbaHooks$createCtx2[0],
LocalLoadingCtxProvider = _fbaHooks$createCtx2[1];
/**
* 局部加载,包含接口数据处理逻辑
* ```
* 包括
* 1. loading显示效果、error显示效果、获取服务数据
* 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用
* 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段
* 4. 通过 ref.onRequest 可主动发起服务调用
* 5. 子组件通过下面方式主动发起服务调用
* const localLoadingApi = LocalLoading.useLocalLoading();
* localLoadingApi.onRequest();
* 6. 如果内部需要滚动条,可设置 contentScroll = true (外部有高度或者设置style.height 才能生效)
* ```
*/
var LocalLoadingInner = /*#__PURE__*/forwardRef(function (props, ref) {
var serviceConfig = props.serviceConfig,
isAsync = props.isAsync,
children = props.children,
errorRender = props.errorRender,
loadingSpinProps = props.loadingSpinProps,
textConfigs = props.textConfigs,
showRequiredError = props.showRequiredError,
contentScroll = props.contentScroll,
contentStyle = props.contentStyle,
height = props.height;
var _useState = useState('init'),
_useState2 = _slicedToArray(_useState, 2),
status = _useState2[0],
setStatus = _useState2[1];
var _useState3 = useState(),
_useState4 = _slicedToArray(_useState3, 2),
respData = _useState4[0],
setRespData = _useState4[1];
var loadingHeight = props.loadingHeight === undefined ? 100 : props.loadingHeight;
var _useState5 = useState(false),
_useState6 = _slicedToArray(_useState5, 2),
loading = _useState6[0],
setLoading = _useState6[1];
var errorRef = useRef();
var prevParams = fbaHooks.usePrevious(serviceConfig.params);
var loadingSpinContent = getValueOrDefault(loadingSpinProps === null || loadingSpinProps === void 0 ? void 0 : loadingSpinProps.content, /*#__PURE__*/jsx("span", {}));
var loadingSpinBgColor = getValueOrDefault(loadingSpinProps === null || loadingSpinProps === void 0 ? void 0 : loadingSpinProps.bgColor, 'rgba(0,0,0,0.01)');
var loadingSpinTip = getValueOrDefault(loadingSpinProps === null || loadingSpinProps === void 0 ? void 0 : loadingSpinProps.tip, 'Loading');
var requiredErrorText = textConfigs === null || textConfigs === void 0 ? void 0 : textConfigs.requiredErrorText;
// 用于直接发起接口调用,不能用于比较
var serviceParams = useMemo(function () {
var _serviceConfig$invali;
if (!serviceConfig.params || toArray(serviceConfig.invalidParamKey).length === 0) {
return serviceConfig.params;
}
var newParams = _objectSpread2({}, serviceConfig.params);
(_serviceConfig$invali = serviceConfig.invalidParamKey) === null || _serviceConfig$invali === void 0 || _serviceConfig$invali.forEach(function (key) {
newParams[key] = undefined;
});
return newParams;
}, [serviceConfig]);
// 判断必要参数是否完整
var validateRequiredParamsComplete = useMemoizedFn(function (params) {
var keys = serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.requiredParamsKeys;
if (keys !== null && keys !== void 0 && keys.length) {
var target = keys.find(function (item) {
return isUndefinedOrNull(params === null || params === void 0 ? void 0 : params[item]);
});
if (target) {
return {
complete: false,
message: requiredErrorText || "LocalLoading\u6E32\u67D3\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1A".concat(keys.join('、'))
};
}
}
return {
complete: true
};
});
var completeResult = useMemo(function () {
return validateRequiredParamsComplete(serviceConfig.params);
}, [validateRequiredParamsComplete, serviceConfig.params]);
var onInitRequest = function onInitRequest(params) {
return new Promise(function ($return, $error) {
var $Try_1_Finally = function ($Try_1_Exit) {
return function ($Try_1_Value) {
try {
setLoading(false);
return $Try_1_Exit && $Try_1_Exit.call(this, $Try_1_Value);
} catch ($boundEx) {
return $error($boundEx);
}
}.bind(this);
}.bind(this);
var mergeProps, _respData;
var $Try_1_Post = function () {
try {
return $return();
} catch ($boundEx) {
return $error($boundEx);
}
};
var $Try_1_Catch = function (error) {
try {
console.error(error);
setStatus('error');
errorRef.current = error.message;
return $Try_1_Finally($Try_1_Post)();
} catch ($boundEx) {
return $Try_1_Finally($error)($boundEx);
}
};
try {
mergeProps = _objectSpread2(_objectSpread2({}, serviceParams), params);
setLoading(true);
return Promise.resolve(serviceConfig.onRequest(mergeProps)).then(function ($await_3) {
try {
_respData = $await_3;
setStatus('success');
setRespData(_respData);
return $Try_1_Finally($Try_1_Post)();
} catch ($boundEx) {
return $Try_1_Catch($boundEx);
}
}, $Try_1_Catch);
} catch (error) {
$Try_1_Catch(error);
}
});
};
fbaHooks.useEffectCustomAsync(function () {
return new Promise(function ($return, $error) {
if (completeResult.complete) {
return Promise.resolve(onInitRequest()).then(function ($await_4) {
try {
return $If_2.call(this);
} catch ($boundEx) {
return $error($boundEx);
}
}.bind(this), $error);
}
function $If_2() {
return $return();
}
return $If_2.call(this);
});
}, []);
fbaHooks.useEffectCustom(function () {
if (completeResult.complete) {
if (prevParams) {
if (!isDeepEqual(serviceConfig.params, prevParams)) {
if (status === 'error') {
setStatus('init');
}
void onInitRequest();
}
}
}
}, [prevParams, serviceConfig.params]);
useImperativeHandle(ref, function () {
return {
onRefresh: onInitRequest
};
});
if (!completeResult.complete) {
if (!showRequiredError) {
return /*#__PURE__*/jsx(Fragment, {});
}
return /*#__PURE__*/jsx(LocalLoadingCtxProvider, {
value: {
onRequest: onInitRequest
},
children: /*#__PURE__*/jsxs("div", {
className: classNames('local-loading-error', props.className),
children: [/*#__PURE__*/jsx("div", {
className: "local-loading-area"
}), /*#__PURE__*/jsx(Result, {
status: "error",
subTitle: completeResult.message
})]
})
});
}
if (status === 'error') {
if (errorRender) {
return errorRender({
message: errorRef.current
});
}
return /*#__PURE__*/jsx(LocalLoadingCtxProvider, {
value: {
onRequest: onInitRequest
},
children: /*#__PURE__*/jsxs("div", {
className: classNames('local-loading-error', props.className),
children: [/*#__PURE__*/jsx("div", {
className: "local-loading-area"
}), /*#__PURE__*/jsx(Result, {
status: "error",
subTitle: errorRef.current || '数据处理异常',
extra: [/*#__PURE__*/jsx(Button, {
type: "primary",
ghost: true,
size: "small",
onClick: function onClick() {
setStatus('init');
void onInitRequest();
},
children: "\u91CD\u65B0\u83B7\u53D6"
}, "console")]
})]
})
});
}
if (status !== 'success' && !isAsync) {
return /*#__PURE__*/jsx("div", {
className: classNames('fba-local-loading-process', props.className),
style: {
height: loadingHeight,
display: 'flex',
justifyContent: 'center',
position: 'relative',
backgroundColor: 'var(--block-bg-color)'
},
children: /*#__PURE__*/jsx(Spin, {
spinning: loading,
tip: loadingSpinTip,
wrapperClassName: "local-loading-spin-wrapper",
className: "local-loading-spin",
style: {
'--local-loading-spin-bgColor': loadingSpinBgColor
},
children: loadingSpinContent
})
});
}
var className = classNames('fba-local-loading', {
'fll-content-scroll': contentScroll
}, props.className);
var rootStyle = _objectSpread2({
height: height
}, props.style);
return /*#__PURE__*/jsx(LocalLoadingCtxProvider, {
value: {
onRequest: onInitRequest
},
children: /*#__PURE__*/jsxs("div", {
className: className,
style: rootStyle,
children: [loading ? /*#__PURE__*/jsx(Spin, {
spinning: loading,
tip: loadingSpinTip,
wrapperClassName: "local-loading-spin-wrapper",
className: "local-loading-spin",
style: {
'--local-loading-spin-bgColor': loadingSpinBgColor
},
children: loadingSpinContent
}) : null, /*#__PURE__*/jsx("div", {
className: "local-loading-content",
style: contentStyle,
children: children(respData)
})]
})
});
});
/**
* 局部加载,包含接口数据处理逻辑
* ```
* 包括
* 1. loading显示效果、error显示效果、获取服务数据
* 2. 当 serviceConfig.params 值与上一次值不相等时,会主动发起服务调用
* 3. 通过 serviceConfig.requiredParamsKeys 设置服务调用必填字段
* 4. 通过 ref.onRequest 可主动发起服务调用
* 5. 子组件通过下面方式主动发起服务调用
* const localLoadingApi = LocalLoading.useLocalLoading();
* localLoadingApi.onRequest();
* 6. 如果内部需要滚动条,可设置 contentScroll = true (外部有高度或者设置style.height 才能生效)
* ```
*/
var LocalLoading = fbaUtils.attachPropertiesToComponent(LocalLoadingInner, {
useLocalLoading: function useLocalLoading() {
var ctx = useLocalLoadingCtx();
return {
onRequest: function onRequest(params) {
ctx.onRequest(params);
}
};
}
});
export { LocalLoading };
//# sourceMappingURL=index.js.map