@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
56 lines (55 loc) • 2.05 kB
JavaScript
"use client";
import _extends from "@babel/runtime/helpers/esm/extends";
import React, { useCallback, useContext } from 'react';
import classnames from 'classnames';
import DataContext from "../../DataContext/Context.js";
import Button from "../../../../components/button/Button.js";
import SubmitIndicator from "../SubmitIndicator/index.js";
import useTranslation from "../../hooks/useTranslation.js";
import { send } from "../../../../icons/index.js";
import useId from "../../../../shared/helpers/useId.js";
function SubmitButton(props) {
const translations = useTranslation().SubmitButton;
const {
variant,
className,
showIndicator,
children,
text,
...rest
} = props;
const content = text || children || (variant === 'send' ? translations.sendText : translations.text);
const submitButtonId = useId();
const {
formState,
handleSubmit,
hasElementRef,
props: dataContextProps,
activeSubmitButtonId,
setActiveSubmitButtonId
} = useContext(DataContext) || {};
const {
isolate
} = dataContextProps || {};
const onClickHandler = useCallback(() => {
setActiveSubmitButtonId?.(submitButtonId);
if (!hasElementRef?.current) {
handleSubmit?.();
}
}, [hasElementRef, handleSubmit, setActiveSubmitButtonId, submitButtonId]);
const isActiveSubmitButton = !activeSubmitButtonId || activeSubmitButtonId === submitButtonId;
const indicatorState = showIndicator ? 'pending' : isActiveSubmitButton ? formState : undefined;
return React.createElement(Button, _extends({
className: classnames('dnb-forms-submit-button', className),
onClick: onClickHandler,
type: isolate ? 'button' : 'submit',
variant: variant === 'secondary' ? 'secondary' : undefined,
icon: variant === 'send' ? send : null,
"data-form-submit-button-id": submitButtonId
}, rest), content, React.createElement(SubmitIndicator, {
state: indicatorState
}));
}
SubmitButton._supportsSpacingProps = true;
export default SubmitButton;
//# sourceMappingURL=SubmitButton.js.map