UNPKG

@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
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 };