Untitled
unknown
plain_text
2 years ago
6.4 kB
3
Indexable
import React from 'react'; import GeneralHelper from 'system/helpers/GeneralHelper'; import findByType from 'system/utils/FindByType'; import appSettingsConstants from 'system/constants/constants'; import useEntityType from 'system/hooks/useEntityType'; const EntityFormButtons = ( entityState, detailContextState, SaveActionButtons, CustomActionButtons, CustomActionButtonsWithConfirmationModal, DeleteActionButtons, CopyActionButtons, saveWithFieldUpdate, setSaveClicked, setShowDeleteModal, hasErrors, children ) => { const [entityType] = useEntityType(entityState.entity.entityTypeCode); const isSingleGrid = () => { if (detailContextState && GeneralHelper.isEmpty(detailContextState.detail)) return true; if ( detailContextState && detailContextState.detail.parts.length === 1 && (detailContextState.detail.parts[0].relationshipDisplayType === appSettingsConstants.relationship.relationshipDisplay.grid || detailContextState.detail.parts[0].relationshipDisplayType === appSettingsConstants.relationship.relationshipDisplay.externalEntity) ) return true; return false; }; const onClickDelete = (e) => { e.preventDefault(); setShowDeleteModal(true); }; const renderSaveActionButtons = () => { if (entityState.displayMode === appSettingsConstants.displayMode.view) return null; if (isSingleGrid()) return null; const actionBtns = findByType(children, SaveActionButtons); if (!actionBtns) return null; const saveActionBtns = []; React.Children.map(actionBtns.props.children, (actionBtn) => { let isHidden = false; if (actionBtn.props.isHidden) isHidden = actionBtn.props.isHidden(entityState.entity); if (!isHidden) { saveActionBtns.push( React.cloneElement(actionBtn, { onClick: (e) => { e.preventDefault(); if (actionBtn.props.onClick) { if (actionBtn.props.triggerSaveWithFieldUpdate) { const updatedField = actionBtn.props.onClick(entityState.entity); actionBtn.props.disabled(entityState.isLoading); saveWithFieldUpdate(updatedField); } else { actionBtn.props.onClick(entityState.entity); actionBtn.props.disabled(entityState.isLoading); } } else if (!actionBtn.props.items) { setSaveClicked(); actionBtn.props.disabled(entityState.isLoading); } }, key: actionBtn.props.title, }) ); } }); return saveActionBtns; }; const renderCustomActionButtons = () => { if (isSingleGrid()) return null; const actionBtns = findByType(children, CustomActionButtons); if (!actionBtns) return null; const customActionBtns = []; React.Children.map(actionBtns.props.children, (actionBtn) => { if (actionBtn) { let isHidden = false; if (actionBtn.props.isHidden) isHidden = actionBtn.props.isHidden(entityState.entity, entityState.displayMode, entityState.permissions); if (!isHidden) customActionBtns.push( React.cloneElement(actionBtn, { onClick: () => { if (actionBtn.props.triggerValidation === true && hasErrors()) return; if (actionBtn.props.triggerSaveWithFieldUpdate) { const updatedField = actionBtn.props.onClick(entityState.entity); saveWithFieldUpdate(updatedField); } else actionBtn.props.onClick(entityState.entity); }, key: actionBtn.props.title, }) ); } }); return customActionBtns; }; const renderCustomActionButtonsWithConfirmationModal = () => { if (isSingleGrid()) return null; const actionBtns = findByType(children, CustomActionButtonsWithConfirmationModal); if (!actionBtns) return null; const customActionBtnsWithConfirmationModal = []; React.Children.map(actionBtns.props.children, (actionBtn) => { let isHidden = false; if (actionBtn.props.isHidden) isHidden = actionBtn.props.isHidden(entityState.entity, entityState.displayMode, entityState.permissions); if (!isHidden) customActionBtnsWithConfirmationModal.push(React.cloneElement(actionBtn)); }); return customActionBtnsWithConfirmationModal; }; const renderDeleteActionButtons = () => { if (entityState.displayMode === appSettingsConstants.displayMode.view) return null; if (isSingleGrid()) return null; const actionBtns = findByType(children, DeleteActionButtons); if (!actionBtns) return null; const deleteActionBtns = []; React.Children.map(actionBtns.props.children, (actionBtn) => { let isHidden = false; if (actionBtn.props.isHidden) isHidden = actionBtn.props.isHidden(entityState.entity); if (!isHidden) deleteActionBtns.push(React.cloneElement(actionBtn, { onClick: onClickDelete, key: actionBtn.props.title })); }); return deleteActionBtns; }; const renderCopyActionButtons = (handleCopy) => { if (entityState.displayMode === appSettingsConstants.displayMode.view || !entityType?.canBeCopied) return null; if (isSingleGrid()) return null; const actionBtns = findByType(children, CopyActionButtons); if (!actionBtns) return null; const copyActionBtns = []; React.Children.map(actionBtns.props.children, (actionBtn) => { let isHidden = false; if (actionBtn.props.isHidden) isHidden = actionBtn.props.isHidden(entityState.entity, entityState.displayMode); if (!isHidden) copyActionBtns.push( React.cloneElement(actionBtn, { onClick: () => handleCopy(entityState.entity.id), key: actionBtn.props.title, }) ); }); return copyActionBtns; }; return { renderSaveActionButtons, renderCustomActionButtons, renderCustomActionButtonsWithConfirmationModal, renderDeleteActionButtons, renderCopyActionButtons, }; }; export default EntityFormButtons;
Editor is loading...