@flatbiz/antd
Version:
244 lines (236 loc) • 9.64 kB
JavaScript
/*! @flatjs/forge MIT @flatbiz/antd */
import { classNames } from '@dimjs/utils/class-names/class-names';
import { a as _slicedToArray, b as _objectSpread2, _ as _objectWithoutProperties } from './_rollupPluginBabelHelpers-BspM60Sw.js';
import { Fragment, useState, useRef, useMemo } from 'react';
import { F as FormItemHidden } from './form-item-hidden-BtQvJEx7.js';
import { F as FormItemWrapper } from './form-item-wrapper-Ci7-5IKi.js';
import _RedoOutlined from '@ant-design/icons/es/icons/RedoOutlined.js';
import _QuestionCircleFilled from '@ant-design/icons/es/icons/QuestionCircleFilled.js';
import { Tooltip, Spin, Form } from 'antd';
import { isUndefinedOrNull, toArray } from '@flatbiz/utils';
import { T as TextOverflow } from './text-overflow-B4NevAuv.js';
import { T as TipsWrapper } from './tips-wrapper-DvbgHMwl.js';
import { jsx, jsxs } from 'react/jsx-runtime';
import { isDeepEqual } from '@dimjs/lang/is-deep-equal';
import { fbaHooks } from './fba-hooks/index.js';
var FormItemTextContent = function FormItemTextContent(props) {
var originalValue = function () {
if (isUndefinedOrNull(props.value)) return props.placeholderValue;
return typeof props.value === 'string' ? props.value : JSON.stringify(props.value);
}();
var valueFt = props.wrap ? originalValue : /*#__PURE__*/jsx(TextOverflow, {
text: originalValue || ''
});
if (props.status === 'error') {
return /*#__PURE__*/jsx(Fragment, {
children: /*#__PURE__*/jsx(TipsWrapper, {
tipType: "tooltip",
tooltipProps: {
title: props.errorMsg
},
icon: /*#__PURE__*/jsx(_QuestionCircleFilled, {
style: {
color: 'red'
}
}),
gap: 6,
children: /*#__PURE__*/jsx(Tooltip, {
title: "\u70B9\u51FB\u67E5\u8BE2",
children: /*#__PURE__*/jsx(_RedoOutlined, {
style: {
color: 'red'
},
onClick: props.onRequest,
className: "fitc-reload-icon"
})
})
})
});
}
if (props.loading) {
return /*#__PURE__*/jsx("span", {
className: "form-item-text-content fitc-loading",
style: props.style,
children: /*#__PURE__*/jsx(Spin, {
spinning: props.loading,
size: "small",
children: /*#__PURE__*/jsx("span", {
style: {
textIndent: '-9999px',
display: 'inline-block'
},
children: "Loading"
})
})
});
}
return /*#__PURE__*/jsx("span", {
className: "form-item-text-content",
style: props.style,
children: props.render ? props.render(props.value) : valueFt
});
};
var useRequestFormItemText = function useRequestFormItemText(props) {
var serviceConfig = props.serviceConfig;
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
loading = _useState2[0],
setLoading = _useState2[1];
var _useState3 = useState(),
_useState4 = _slicedToArray(_useState3, 2),
respData = _useState4[0],
setRespData = _useState4[1];
var prevParams = fbaHooks.usePrevious(serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.params);
var _useState5 = useState('init'),
_useState6 = _slicedToArray(_useState5, 2),
status = _useState6[0],
setStatus = _useState6[1];
var errorMsgRef = useRef();
var form = Form.useFormInstance();
// 用于直接发起接口调用,不能用于比较
var serviceParams = useMemo(function () {
var _serviceConfig$invali;
if (!(serviceConfig !== null && serviceConfig !== void 0 && serviceConfig.params) || toArray(serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.invalidParamKey).length === 0) {
return serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.params;
}
var newParams = _objectSpread2({}, serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.params);
serviceConfig === null || serviceConfig === void 0 || (_serviceConfig$invali = serviceConfig.invalidParamKey) === null || _serviceConfig$invali === void 0 || _serviceConfig$invali.forEach(function (key) {
newParams[key] = undefined;
});
return newParams;
}, [serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.invalidParamKey, serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.params]);
var onInnerRequest = function onInnerRequest(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, keys, target, _respData, value, respDataFt;
if (!serviceConfig) return $return();
mergeProps = _objectSpread2(_objectSpread2({}, serviceParams), params);
keys = serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.requiredParamsKeys;
if (keys !== null && keys !== void 0 && keys.length) {
target = keys.find(function (item) {
return isUndefinedOrNull(mergeProps[item]);
});
if (target) {
errorMsgRef.current = "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1A".concat(keys.join('、'));
console.warn(errorMsgRef.current);
setStatus('error');
return $return();
}
}
var $Try_1_Post = function () {
try {
return $return();
} catch ($boundEx) {
return $error($boundEx);
}
};
var $Try_1_Catch = function (error) {
try {
console.error(error);
errorMsgRef.current = (error === null || error === void 0 ? void 0 : error.message) || '接口调用异常';
setStatus('error');
return $Try_1_Finally($Try_1_Post)();
} catch ($boundEx) {
return $Try_1_Finally($error)($boundEx);
}
};
try {
if (!loading) setLoading(true);
setStatus('init');
return Promise.resolve(serviceConfig.onRequest(mergeProps)).then(function ($await_2) {
try {
_respData = $await_2;
value = props.name ? form.getFieldValue(props.name) : undefined;
respDataFt = serviceConfig.onResponseAdapter ? serviceConfig.onResponseAdapter(_respData, value) : _respData;
setRespData(respDataFt);
setStatus('success');
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(onInnerRequest, []);
fbaHooks.useEffectCustom(function () {
if (!serviceConfig) return;
if (prevParams) {
if (!isDeepEqual(serviceConfig.params, prevParams)) {
void onInnerRequest();
}
}
}, [prevParams, serviceConfig === null || serviceConfig === void 0 ? void 0 : serviceConfig.params]);
if (!serviceConfig) {
return undefined;
}
return {
loading: loading,
status: status,
viewValue: respData,
onRequest: onInnerRequest,
errorMsg: errorMsgRef.current
};
};
var _excluded$1 = ["wrap", "render", "placeholderValue", "serviceConfig"];
var RequestText = function RequestText(props) {
var wrap = props.wrap,
render = props.render,
placeholderValue = props.placeholderValue,
serviceConfig = props.serviceConfig,
otherProps = _objectWithoutProperties(props, _excluded$1);
var requestResult = useRequestFormItemText({
serviceConfig: serviceConfig,
name: props.name
});
return /*#__PURE__*/jsx(FormItemWrapper, _objectSpread2(_objectSpread2({}, otherProps), {}, {
name: undefined,
className: classNames('form-item-text', props.className),
children: /*#__PURE__*/jsx(FormItemTextContent, {
loading: requestResult === null || requestResult === void 0 ? void 0 : requestResult.loading,
wrap: wrap,
render: render,
placeholderValue: placeholderValue,
value: requestResult === null || requestResult === void 0 ? void 0 : requestResult.viewValue,
status: requestResult === null || requestResult === void 0 ? void 0 : requestResult.status,
onRequest: requestResult === null || requestResult === void 0 ? void 0 : requestResult.onRequest,
errorMsg: requestResult === null || requestResult === void 0 ? void 0 : requestResult.errorMsg
})
}));
};
var _excluded = ["wrap", "render", "placeholderValue"];
var FormItemText = function FormItemText(props) {
var wrap = props.wrap,
render = props.render,
placeholderValue = props.placeholderValue,
otherProps = _objectWithoutProperties(props, _excluded);
if (props.serviceConfig) {
return /*#__PURE__*/jsxs(Fragment, {
children: [/*#__PURE__*/jsx(FormItemHidden, {
name: props.name
}), /*#__PURE__*/jsx(RequestText, _objectSpread2({}, props))]
});
}
return /*#__PURE__*/jsx(FormItemWrapper, _objectSpread2(_objectSpread2({}, otherProps), {}, {
className: classNames('form-item-text', props.className),
children: /*#__PURE__*/jsx(FormItemTextContent, {
wrap: wrap,
render: render,
placeholderValue: placeholderValue
})
}));
};
FormItemText['domTypeName'] = 'FormItemText';
export { FormItemText as F };
//# sourceMappingURL=form-item-text-lMeRus2l.js.map