@appbuckets/react-ui-smart-components
Version:
UI Extended Components that work with @appbuckets/react-client and @appbuckets/react-ui
179 lines (173 loc) • 5.34 kB
JavaScript
;
var _tslib = require('../../_virtual/_tslib.js');
var React = require('react');
var reactUiCore = require('@appbuckets/react-ui-core');
var reactAppClient = require('@appbuckets/react-app-client');
var SmartComponentsProvider = require('../../SmartComponentsProvider/SmartComponentsProvider.js');
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(
n,
k,
d.get
? d
: {
enumerable: true,
get: function () {
return e[k];
},
}
);
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/ _interopNamespace(React);
/* --------
* Hook Definition
* -------- */
function useActionBuilder(configuration, userDefinedProps) {
// ----
// Get from Config
// ----
var // Buttons
defaultDefinedModalTrigger = configuration.trigger,
// Actions
defaultDefinedCancelHandler = configuration.onCancel,
defaultDefinedCompletedHandler = configuration.onCompleted,
defaultDefinedSubmitHandler = configuration.onSubmit,
defaultDefinedSubmitErrorHandler = configuration.onSubmitError;
// ----
// Get from User Defined Props
// ----
var // Buttons
userDefinedModalTrigger = userDefinedProps.trigger,
// Actions
userDefinedCancelHandler = userDefinedProps.onCancel,
userDefinedCompletedHandler = userDefinedProps.onCompleted,
userDefinedSubmitHandler = userDefinedProps.onSubmit,
userDefinedSubmitErrorHandler = userDefinedProps.onSubmitError,
// Modal Props
userDefinedModalDefaultOpen = userDefinedProps.defaultOpen,
userDefinedModalCloseHandler = userDefinedProps.onModalClose,
userDefinedModalOpenHandler = userDefinedProps.onModalOpen,
userDefinedModalOpen = userDefinedProps.open;
// ----
// Define Actions
// ----
var onCancel = userDefinedCancelHandler || defaultDefinedCancelHandler;
var onCompleted =
userDefinedCompletedHandler || defaultDefinedCompletedHandler;
var onSubmit = userDefinedSubmitHandler || defaultDefinedSubmitHandler;
var onSubmitError =
userDefinedSubmitErrorHandler || defaultDefinedSubmitErrorHandler;
// ----
// Hooks and State Definition
// ----
var notificationManager = (SmartComponentsProvider.useSmartComponents() || {})
.notificationManager;
var client = reactAppClient.useClient();
var _a = _tslib.__read(React__namespace.useState(), 2),
actionError = _a[0],
setActionError = _a[1];
var _b = _tslib.__read(
reactUiCore.useAutoControlledValue(false, {
defaultProp: userDefinedModalDefaultOpen,
prop: userDefinedModalOpen,
}),
2
),
open = _b[0],
trySetModalOpen = _b[1];
var actionHelpers = React__namespace.useMemo(
function () {
return {
client: client,
error: actionError,
setError: setActionError,
toast: notificationManager,
};
},
[actionError, client, notificationManager]
);
// ----
// Utilities
// ----
var couldRenderActionButton = React__namespace.useCallback(function (
userDefinedButton,
defaultDefinedButton
) {
/** If user defined button is explicit set to null, hide button */
if (userDefinedButton === null) {
return false;
}
/** If no button exists, omit rendering */
if (!defaultDefinedButton && !userDefinedButton) {
return false;
}
/** Fallback to true */
return true;
},
[]);
// ----
// Handlers
// ----
var handleModalOpen = React__namespace.useCallback(
function (e, modalProps) {
/** Try to set the auto controlled open state value */
trySetModalOpen(true);
/** Check if a user defined handler exists */
if (typeof userDefinedModalOpenHandler === 'function') {
userDefinedModalOpenHandler(e, modalProps);
}
},
[trySetModalOpen, userDefinedModalOpenHandler]
);
var handleModalClose = React__namespace.useCallback(
function (e, modalProps) {
/** Try to set the auto controlled open state value */
trySetModalOpen(false);
/** Check if a user defined handler exists */
if (typeof userDefinedModalCloseHandler === 'function') {
userDefinedModalCloseHandler(e, modalProps);
}
},
[trySetModalOpen, userDefinedModalCloseHandler]
);
// ----
// Return Data
// ----
return _tslib.__assign(
{
// Action Helpers
actionHelpers: actionHelpers,
// State
actionError: actionError,
open: open,
// Utilities
couldRenderActionButton: couldRenderActionButton,
// Handlers
handleModalOpen: handleModalOpen,
handleModalClose: handleModalClose,
// Modals
trigger:
userDefinedModalTrigger !== null && userDefinedModalTrigger !== void 0
? userDefinedModalTrigger
: defaultDefinedModalTrigger,
},
{
onCancel: onCancel,
onCompleted: onCompleted,
onSubmit: onSubmit,
onSubmitError: onSubmitError,
}
);
}
module.exports = useActionBuilder;