@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
74 lines (73 loc) • 2.61 kB
JavaScript
"use client";
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
import React, { useCallback, useContext } from 'react';
import SectionContainerContext from "../containers/SectionContainerContext.js";
import ToolbarContext from "../Toolbar/ToolbarContext.js";
import { useTranslation } from "../../../hooks/index.js";
import { Button, Dialog } from "../../../../../components/index.js";
import { close } from "../../../../../icons/index.js";
import useContainerDataStore from "./useContainerDataStore.js";
import FieldBoundaryContext from "../../../DataContext/FieldBoundary/FieldBoundaryContext.js";
export default function CancelButton({
showConfirmDialog = true,
...buttonProps
}) {
const {
onCancel,
setShowError
} = useContext(ToolbarContext) || {};
const {
restoreOriginalData
} = useContainerDataStore();
const {
switchContainerMode
} = useContext(SectionContainerContext) || {};
const {
setShowBoundaryErrors,
verifyFieldError,
hasVisibleError
} = useContext(FieldBoundaryContext) || {};
const translation = useTranslation();
const {
cancelButton,
confirmCancelText
} = translation.SectionEditContainer;
const cancelHandler = useCallback(({
close
}) => {
close === null || close === void 0 || close();
restoreOriginalData();
requestAnimationFrame(() => {
if (verifyFieldError !== null && verifyFieldError !== void 0 && verifyFieldError()) {
setShowBoundaryErrors === null || setShowBoundaryErrors === void 0 || setShowBoundaryErrors(true);
if (hasVisibleError) {
setShowError(true);
}
} else {
setShowError(false);
setShowBoundaryErrors === null || setShowBoundaryErrors === void 0 || setShowBoundaryErrors(false);
switchContainerMode === null || switchContainerMode === void 0 || switchContainerMode('view');
}
onCancel === null || onCancel === void 0 || onCancel();
});
}, [hasVisibleError, onCancel, restoreOriginalData, setShowBoundaryErrors, setShowError, switchContainerMode, verifyFieldError]);
const triggerAttributes = {
variant: 'tertiary',
icon: close,
icon_position: 'left',
text: cancelButton,
...buttonProps
};
if (showConfirmDialog) {
return React.createElement(Dialog, {
variant: "confirmation",
title: confirmCancelText,
triggerAttributes: triggerAttributes,
onConfirm: cancelHandler
});
}
return React.createElement(Button, _extends({}, triggerAttributes, {
on_click: cancelHandler
}));
}
//# sourceMappingURL=CancelButton.js.map