@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
95 lines (94 loc) • 2.99 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 FieldBoundaryContext from "../../DataContext/FieldBoundary/FieldBoundaryContext.js";
import { reset } from "../../../../icons/index.js";
import useHasContentChanged from "./useHasContentChanged.js";
import { omitDataValueReadWriteProps } from "../../types.js";
import useDataContextSnapshot from "./useDataContextSnapshot.js";
import useHandleStatus from "./useHandleStatus.js";
import { isolationError } from "./IsolatedContainer.js";
import IsolationContext from "./IsolationContext.js";
export default function IsolationResetButton(props) {
const {
text,
children,
onClick,
className,
hidden,
showConfirmDialog = true,
showWhen,
...restProps
} = props;
const {
outerContext,
preventUncommittedChanges
} = useContext(IsolationContext);
const {
setShowBoundaryErrors
} = useContext(FieldBoundaryContext) || {};
const {
handleReset
} = useDataContextSnapshot({
enabled: true
});
const {
hasContentChanged
} = useHasContentChanged();
const {
showStatus: showCommitStatus
} = useHandleStatus({
outerContext,
preventUncommittedChanges,
error: isolationError,
name: 'isolation-reset-button'
});
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);
handleReset();
setShowBoundaryErrors?.(false);
buttonWrapperRef.current?.focus();
}, [onClick, handleReset, setShowBoundaryErrors]);
if (hidden) {
return null;
}
const triggerAttributes = {
className: classnames('dnb-forms-isolate__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",
hidden: !(showWhen === 'uncommittedChangeDetected' ? Boolean(showCommitStatus) : true)
}, showConfirmDialog ? React.createElement(Dialog, {
variant: "confirmation",
title: confirmResetText,
triggerAttributes: triggerAttributes,
onConfirm: handleClick
}) : React.createElement(Button, _extends({}, triggerAttributes, {
on_click: handleClick
}, buttonProps), resetButton));
}
//# sourceMappingURL=IsolationResetButton.js.map