@pega/dx-component-builder-sdk
Version:
Utility for building custom UI components
69 lines (62 loc) • 2.58 kB
text/typescript
export const getDeferFriendlyTabs = allTabs => {
return allTabs.map(tab => {
const theTabCompConfig = tab.getPConnect().getConfigProps();
return { type: 'DeferLoad', config: theTabCompConfig };
});
};
export const getVisibleTabs = (allTabs, uuid) => {
let index = 0;
return allTabs.props
.getPConnect()
.getChildren()
?.filter(child => {
// US-402838: Filter out tab entries if the config object does not contain the visibility attribute or it evaluates to the boolean true,
const config = child.getPConnect().getConfigProps();
// BUG-642335 - adding isChildDeferLoad prop
if (child.getPConnect().getComponentName() === 'DeferLoad') {
const { name: viewName, deferLoadId = `${viewName}_${uuid}_${index}` } = config;
child.getPConnect().registerAdditionalProps({
deferLoadId,
isChildDeferLoad: true
});
}
index += 1;
return !('visibility' in config) || config.visibility === true;
});
};
export const getTransientTabs = (availableTabs, currentTabId, tabItems) => {
return (
availableTabs?.map((child, i) => {
const config = child.getPConnect().getConfigProps();
const tabLabel =
config.label ||
config.inheritedProps?.find(obj => obj.prop === 'label')?.value ||
PCore.getLocaleUtils().getLocaleValue('No label specified in config', 'Generic');
const tabContent = () => {
if (i.toString() === currentTabId) {
return tabItems?.[i.toString()]?.content ? tabItems?.[i.toString()]?.content : child.getPConnect().getComponent();
}
return tabItems?.[i.toString()]?.content;
};
return {
name: tabLabel,
id: i.toString(),
content: tabContent()
};
}) || []
);
};
export const tabClick = (id, availableTabs, currentTabId, setCurrentTabId, tabItems) => {
const currentPConn = availableTabs[currentTabId].getPConnect();
const { deferLoadId } = currentPConn.getConfigProps();
PCore.getDeferLoadManager().deactivate(deferLoadId, currentPConn.getContextName());
setCurrentTabId(id);
const index = parseInt(id, 10);
if (tabItems[index]?.content === null) {
tabItems[index].content = availableTabs[index].getPConnect().getComponent();
}
const nextPConn = availableTabs[id].getPConnect();
const { deferLoadId: activeId } = nextPConn?.getConfigProps() || {};
PCore.getDeferLoadManager().activate(activeId, nextPConn?.getContextName());
PCore.getDeferLoadManager().refreshComponent(activeId, nextPConn?.getContextName());
};