@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
83 lines (82 loc) • 2.65 kB
JavaScript
"use client";
import _extends from "@babel/runtime/helpers/esm/extends";
import React, { useCallback, useContext } from 'react';
import classnames from 'classnames';
import { Button, Dialog } from "../../../../components/index.js";
import useTranslation from "../../hooks/useTranslation.js";
import IterateItemContext from "../IterateItemContext.js";
import ToolbarContext from "../Toolbar/ToolbarContext.js";
import FieldBoundaryContext from "../../DataContext/FieldBoundary/FieldBoundaryContext.js";
import { reset } from "../../../../icons/index.js";
import useHasContentChanged from "../../Form/Isolation/useHasContentChanged.js";
import { omitDataValueReadWriteProps } from "../../types.js";
export default function ResetButton(props) {
const {
text,
children,
onClick,
className,
hidden,
showConfirmDialog = true,
...restProps
} = props;
const {
restoreOriginalValue
} = useContext(IterateItemContext) || {};
const {
setShowBoundaryErrors
} = useContext(FieldBoundaryContext) || {};
const {
setShowError
} = useContext(ToolbarContext) || {};
const {
hasContentChanged
} = useHasContentChanged({
enabled: true
});
const buttonProps = omitDataValueReadWriteProps(restProps);
const {
resetButton
} = useTranslation().IterateEditContainer;
const {
confirmResetText
} = useTranslation().IterateEditContainer;
const textContent = text || children || resetButton;
const buttonWrapperRef = React.useRef(null);
const handleClick = useCallback(({
close,
event
}) => {
close?.();
onClick?.(event);
restoreOriginalValue?.();
setShowError(false);
setShowBoundaryErrors?.(false);
buttonWrapperRef.current?.focus();
}, [onClick, restoreOriginalValue, setShowBoundaryErrors, setShowError]);
if (hidden) {
return null;
}
const triggerAttributes = {
className: classnames('dnb-forms-iterate__reset-button', className),
text: textContent,
variant: textContent ? 'tertiary' : 'secondary',
icon: reset,
icon_position: 'left',
disabled: typeof hasContentChanged === 'boolean' ? !hasContentChanged : false,
...buttonProps
};
return React.createElement("span", {
tabIndex: -1,
ref: buttonWrapperRef,
className: "dnb-no-focus"
}, showConfirmDialog ? React.createElement(Dialog, {
variant: "confirmation",
title: confirmResetText,
triggerAttributes: triggerAttributes,
onConfirm: handleClick
}) : React.createElement(Button, _extends({}, triggerAttributes, {
on_click: handleClick
}, buttonProps), resetButton));
}
//# sourceMappingURL=ResetButton.js.map