Untitled
unknown
plain_text
2 years ago
6.4 kB
4
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...