@actinc/dls
Version:
Design Language System (DLS) for ACT & Encoura front-end projects.
59 lines • 2.67 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
/**
* Copyright (c) ACT, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import { useCallback, useState } from 'react';
import { ConfirmDialog } from "../../components/ConfirmDialog";
import { ConfirmContext } from './confirmContext';
export var ConfirmProvider = function (props) {
var children = props.children, _a = props.defaultOptions, defaultOptions = _a === void 0 ? {} : _a;
var _b = useState(__assign({}, defaultOptions)), options = _b[0], setOptions = _b[1];
var _c = useState({}), resolveReject = _c[0], setResolveReject = _c[1];
var resolveHandler = resolveReject.resolve;
var confirm = useCallback(function (confirmOptions) {
if (confirmOptions === void 0) { confirmOptions = {}; }
if (resolveHandler) {
// There is an existing hook waiting to respond, the user
// circumvented the blocking nature of confirms, so we will
// auto trigger a default case.
resolveHandler(false);
}
// eslint-disable-next-line promise/avoid-new
return new Promise(function (resolve, reject) {
setOptions(__assign(__assign({}, options), confirmOptions));
setResolveReject({ reject: reject, resolve: resolve });
});
}, [options, resolveHandler]);
var handleClose = useCallback(function () {
setResolveReject({});
}, []);
var handleCancel = useCallback(function () {
if (resolveHandler) {
resolveHandler(false);
}
handleClose();
}, [resolveHandler, handleClose]);
var handleConfirm = useCallback(function () {
if (resolveHandler) {
resolveHandler(true);
}
handleClose();
}, [resolveHandler, handleClose]);
return (_jsxs(_Fragment, { children: [_jsx(ConfirmContext.Provider, { value: confirm, children: children }), _jsx(ConfirmDialog, __assign({ isOpen: resolveHandler !== undefined, onCancel: handleCancel, onClose: handleClose, onConfirm: handleConfirm }, options))] }));
};
export default ConfirmProvider;
//# sourceMappingURL=confirmProvider.js.map