UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

56 lines (55 loc) 2.05 kB
"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