@wener/console
Version:
Base console UI toolkit
47 lines (46 loc) • 1.7 kB
JavaScript
import React, { useMemo, useState } from "react";
import { isPromise } from "@wener/utils";
import { clsx } from "clsx";
import { daisy, omitDaisyModifiers } from "../utils/daisy.js";
export const Button = ({ className, onClick, as, children, active, disabled, loading, ref, ...props }) => {
const [isLoading, setLoading] = useState(false);
const handleClick = useMemo(() => {
if (!onClick) {
return undefined;
}
setLoading(false);
// if (onClick?.constructor.name === 'AsyncFunction') {
const raw = onClick;
return (...args) => {
const r = raw(...args);
if (isPromise(r)) {
setLoading(true);
r.finally(() => {
setLoading(false);
});
}
return r;
};
// }
// return onClick;
}, [
onClick
]);
const cs = clsx(// input
// input-primary, input-secondary, input-success, input-danger, input-warning, input-info, input-light, input-dark
// input-sm, input-lg, input-xs
// loading loading-sm loading-lg loading-xs
daisy("btn", props), active && "btn-active", (loading || isLoading) && `loading ${daisy("loading", {
size: props.size
})}`, disabled && "btn-disabled", className);
// 有 href 且 disabled 为 false 时,使用 a 标签
const As = as || ("href" in props && !props.disabled ? "a" : "button");
return /*#__PURE__*/ React.createElement(As, {
className: cs,
role: "button",
ref: ref,
onClick: handleClick,
...omitDaisyModifiers(props)
}, children);
};
//# sourceMappingURL=Button.js.map