UNPKG

@wener/console

Version:

Base console UI toolkit

47 lines (46 loc) 1.7 kB
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