import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map'; import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps'; interface SimpleTableSelectProps extends PConnProps { // If any, enter additional props that only exist on this component label: string; referenceList: object[] | string; renderMode: string; showLabel: boolean; promptedFilters: object[]; viewName: string; parameters: any; readonlyContextList: object[] | string; dataRelationshipContext: string; } const isSelfReferencedProperty = (param, referenceProp) => { const [, parentPropName] = param.split('.'); return parentPropName === referenceProp; }; /** * SimpleTable react component * @param {*} props - props */ export default function SimpleTableSelect(props: SimpleTableSelectProps) { // Get emitted components from map (so we can get any override that may exist) const ListView = getComponentFromMap('ListView'); const SimpleTable = getComponentFromMap('SimpleTable'); const PromotedFilters = getComponentFromMap('PromotedFilters'); const { label, getPConnect, renderMode = '', showLabel = true, viewName = '', parameters, dataRelationshipContext = null } = props; const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() }; if (propsToUse.showLabel === false) { propsToUse.label = ''; } const pConn = getPConnect(); const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; const { selectionMode, selectionList } = pConn.getConfigProps() as any; const isMultiSelectMode = selectionMode === MULTI; if (isMultiSelectMode && renderMode === 'ReadOnly') { return ; } const pageReference = pConn.getPageReference(); let referenceProp = isMultiSelectMode ? selectionList.substring(1) : pageReference.substring(pageReference.lastIndexOf('.') + 1); // Replace here to use the context name instead let contextPageReference: string | null = null; if (props.dataRelationshipContext !== null && selectionMode === 'single') { referenceProp = dataRelationshipContext; contextPageReference = pageReference.concat('.').concat(referenceProp); } // Need to get this written so typedefs work const { datasource: { parameters: fieldParameters = {} } = {}, pageClass } = isMultiSelectMode ? pConn.getFieldMetadata(`@P .${referenceProp}`) : pConn.getCurrentPageFieldMetadata(contextPageReference); const compositeKeys: any[] = []; Object.values(fieldParameters).forEach((param: any) => { if (isSelfReferencedProperty(param, referenceProp)) { compositeKeys.push(param.substring(param.lastIndexOf('.') + 1)); } }); // setting default row height for select table const defaultRowHeight = '2'; const additionalTableConfig = { rowDensity: false, enableFreezeColumns: false, autoSizeColumns: false, resetColumnWidths: false, defaultFieldDef: { showMenu: false, noContextMenu: true, grouping: false }, itemKey: '$key', defaultRowHeight }; const listViewProps = { ...props, title: propsToUse.label, personalization: false, grouping: false, expandGroups: false, reorderFields: false, showHeaderIcons: false, editing: false, globalSearch: true, toggleFieldVisibility: false, basicMode: true, additionalTableConfig, compositeKeys, viewName, parameters }; const filters = (getPConnect().getRawMetadata() as any).config.promotedFilters ?? []; const isSearchable = filters.length > 0; if (isSearchable) { return ( ); } return ; }