@pega/dx-component-builder-sdk
Version:
Utility for building custom UI components
139 lines (117 loc) • 5.04 kB
text/typescript
// Moved PCore.getConstants() into each function in which it's used until we can
// make sure that this code isn't run until PCore is defined (after onPCoreReady)
// const { CASE_INFO } = PCore.getConstants();
export const addContainerItem = pConnect => {
const containerManager = pConnect.getContainerManager();
const contextName = pConnect.getContextName(); // here we will get parent context name, as flow container is child of view container
const caseViewMode = pConnect.getValue('context_data.caseViewMode');
let key;
let flowName;
if (caseViewMode !== 'review') {
const target = contextName.substring(0, contextName.lastIndexOf('_'));
const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(target);
const containerItemData = PCore.getContainerUtils().getContainerItemData(target, activeContainerItemID);
if (containerItemData) {
({ key, flowName } = containerItemData);
}
}
containerManager.addContainerItem({
semanticURL: '',
key,
flowName,
caseViewMode: 'perform',
resourceType: 'ASSIGNMENT',
data: pConnect.getDataObject(contextName)
});
};
export const hasContainerItems = pConnect => {
const contextName = pConnect.getContextName();
const containerName = pConnect.getContainerName();
return PCore.getContainerUtils().hasContainerItems(`${contextName}/${containerName}`);
};
export const getActiveCaseActionName = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const caseActions = pConnect.getValue(CASE_INFO.CASE_INFO_ACTIONS);
const activeActionID = pConnect.getValue(CASE_INFO.ACTIVE_ACTION_ID);
const activeAction = caseActions.find(action => action.ID === activeActionID);
return activeAction?.name || '';
};
export const getFirstCaseActionName = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const caseActions = pConnect.getValue(CASE_INFO.CASE_INFO_ACTIONS);
return caseActions[0]?.name || '';
};
export const hasNotificationMessages = pConnect => {
return !!pConnect.getValue('caseMessages');
};
export const isCaseWideLocalAction = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const actionID = pConnect.getValue(CASE_INFO.ACTIVE_ACTION_ID);
const caseActions = pConnect.getValue(CASE_INFO.CASE_INFO_ACTIONS);
if (caseActions && actionID) {
const activeAction = caseActions.find(caseAction => caseAction.ID === actionID);
return activeAction?.type === 'Case';
}
return false;
};
export const getChildCaseAssignments = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const childCases = pConnect.getValue(CASE_INFO.CHILD_ASSIGNMENTS);
let allAssignments = [];
if (childCases && childCases.length > 0) {
childCases.forEach(({ assignments, Name }) => {
if (assignments) {
const childCaseAssignments = assignments.map(assignment => ({
...assignment,
caseName: Name
}));
allAssignments = allAssignments.concat(childCaseAssignments);
}
});
}
return allAssignments;
};
export const hasAssignments = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const assignments = pConnect.getValue(CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS);
const childCasesAssignments = getChildCaseAssignments(pConnect);
// eslint-disable-next-line sonarjs/prefer-single-boolean-return
if (assignments || childCasesAssignments || isCaseWideLocalAction(pConnect)) {
return true;
}
return false;
};
export const showBanner = getPConnect => {
const pConnect = getPConnect();
return hasNotificationMessages(pConnect) || !hasAssignments(pConnect);
};
export const showTodo = pConnect => {
const caseViewMode = pConnect.getValue('context_data.caseViewMode');
return caseViewMode !== 'perform';
};
export const isRenderWithToDoWrapper = (getPConnect, options) => {
const pConnect = getPConnect();
const { showWithToDo } = options;
return showWithToDo && (!isCaseWideLocalAction(pConnect) || showTodo(pConnect));
};
export const getToDoAssignments = pConnect => {
const { CASE_INFO } = PCore.getConstants();
const caseActions = pConnect.getValue(CASE_INFO.CASE_INFO_ACTIONS);
const assignmentLabel = pConnect.getValue(CASE_INFO.ASSIGNMENT_LABEL);
const assignments = pConnect.getValue(CASE_INFO.D_CASE_ASSIGNMENTS_RESULTS) || [];
const childCasesAssignments = getChildCaseAssignments(pConnect) || [];
let childCasesAssignmentsCopy = JSON.parse(JSON.stringify(childCasesAssignments));
childCasesAssignmentsCopy = childCasesAssignmentsCopy.map(assignment => {
assignment.isChild = true;
return assignment;
});
const todoAssignments = [...assignments, ...childCasesAssignmentsCopy];
let todoAssignmentsCopy = JSON.parse(JSON.stringify(todoAssignments));
if (caseActions && !showTodo(pConnect)) {
todoAssignmentsCopy = todoAssignmentsCopy.map(assignment => {
assignment.name = getActiveCaseActionName(pConnect) || assignmentLabel;
return assignment;
});
}
return todoAssignmentsCopy;
};