UNPKG

@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
'use strict'; 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;