import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
import React from "react";
import { get, has, set } from "lodash";
import dayjs from "dayjs";
//#region src/utils/hoc.tsx
function convertProps(props, list, mapper) {
	const out = {};
	list.forEach((key) => {
		if (has(props, key)) set(out, key, mapper(get(props, key), key));
	});
	return out;
}
/**
* 简单包装，不做任何处理
* 部分组件ref比较特殊，包一层会解决这个问题
*/
function withWrap(Comp) {
	return (props) => {
		return /* @__PURE__ */ React.createElement(Comp, props);
	};
}
/**
* 某些组件会用React.Children.only检查子节点
* 需要做处理避免报错
*/
function withSingleChild(Comp, needsConvert = ["children"]) {
	return (props) => {
		const convertedProps = convertProps(props, needsConvert, (prop) => {
			let node = React.Children.toArray(prop)[0];
			if (node === null || typeof node !== "object") node = /* @__PURE__ */ React.createElement("div", null, node);
			return node;
		});
		return /* @__PURE__ */ React.createElement(Comp, _objectSpread2(_objectSpread2({}, props), convertedProps));
	};
}
function withSingleFunctionChild(Comp) {
	return (props) => {
		const { children } = props;
		let node;
		if (typeof children === "function") node = children;
		if (Array.isArray(children) && children.length === 1 && typeof children[0] === "function") node = children[0];
		if (node) return /* @__PURE__ */ React.createElement(Comp, props, node);
		return /* @__PURE__ */ React.createElement("div", null, children);
	};
}
/**
* moment对象在序列化后会被转为字符串
* 需要让日期类组件支持接受字符串值
*/
function withMomentProps(Comp, needsConvert = ["value", "defaultValue"]) {
	return (props) => {
		const convertedProps = convertProps(props, needsConvert, (prop) => {
			if (prop) {
				if (Array.isArray(prop)) return prop.map((v) => dayjs.isDayjs(v) ? v : dayjs(v));
				return dayjs.isDayjs(prop) ? prop : dayjs(prop);
			}
		});
		return /* @__PURE__ */ React.createElement(Comp, _objectSpread2(_objectSpread2({}, props), convertedProps));
	};
}
//#endregion
export { withMomentProps, withSingleChild, withSingleFunctionChild, withWrap };
