@appbuckets/react-ui-smart-components
Version:
UI Extended Components that work with @appbuckets/react-client and @appbuckets/react-ui
148 lines (145 loc) • 4.59 kB
JavaScript
import { __read, __assign } from '../../_virtual/_tslib.js';
import * as React from 'react';
import { useAutoControlledValue } from '@appbuckets/react-ui-core';
import { useClient } from '@appbuckets/react-app-client';
import { useSmartComponents } from '../../SmartComponentsProvider/SmartComponentsProvider.js';
/* --------
* 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 = (useSmartComponents() || {}).notificationManager;
var client = useClient();
var _a = __read(React.useState(), 2),
actionError = _a[0],
setActionError = _a[1];
var _b = __read(
useAutoControlledValue(false, {
defaultProp: userDefinedModalDefaultOpen,
prop: userDefinedModalOpen,
}),
2
),
open = _b[0],
trySetModalOpen = _b[1];
var actionHelpers = React.useMemo(
function () {
return {
client: client,
error: actionError,
setError: setActionError,
toast: notificationManager,
};
},
[actionError, client, notificationManager]
);
// ----
// Utilities
// ----
var couldRenderActionButton = React.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.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.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 __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,
}
);
}
export { useActionBuilder as default };