import { useLayoutEffect } from 'react'; import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map'; import { getFieldMeta } from '@pega/react-sdk-components/lib/components/template/DataReference/utils'; 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; defaultRowHeight: string | number; showPromotedFilters: boolean; displayAs: string; contextPage: object; toggleFieldVisibility: boolean; } function SelectableTable(props: SimpleTableSelectProps) { // Get emitted components from map (so we can get any override that may exist) const ListView = getComponentFromMap('ListView'); const PromotedFilters = getComponentFromMap('PromotedFilters'); const { label, getPConnect, showLabel = true, viewName = '', parameters, dataRelationshipContext = null, referenceList, showPromotedFilters, displayAs, readonlyContextList, contextPage, toggleFieldVisibility } = props; const pConn = getPConnect(); const propsToUse = { label, showLabel, ...getPConnect().getInheritedProps() }; if (propsToUse.showLabel === false) { propsToUse.label = ''; } const { compositeKeys, fieldMetadata } = getFieldMeta(getPConnect, dataRelationshipContext); const { pageClass } = fieldMetadata; const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; const { selectionMode, selectionList } = pConn.getConfigProps() as any; const isMultiSelectMode = selectionMode === MULTI; useLayoutEffect(() => { if (isMultiSelectMode) { // register selectionList in c11nEnv stateProps for client side validation pConn.setStateProps({ selectionList }); pConn.getListActions().initDefaultPageInstructions(selectionList, compositeKeys); } }, []); const additionalTableConfig: any = { rowDensity: displayAs === 'table' || displayAs === 'advancedSearch', enableFreezeColumns: displayAs === 'table' || displayAs === 'advancedSearch', autoSizeColumns: displayAs === 'table' || displayAs === 'advancedSearch', resetColumnWidths: displayAs === 'table' || displayAs === 'advancedSearch', defaultFieldDef: { aggregation: false }, itemKey: '$key' }; const searchFields = (pConn as any).getRawConfigProps?.()?.searchFields ?? []; let selectedValues: any = isMultiSelectMode ? readonlyContextList : contextPage; if (displayAs === 'advancedSearch') { selectedValues = null; } const listViewProps = { ...props, title: propsToUse.label, personalization: false, grouping: false, expandGroups: false, showHeaderIcons: false, editing: false, globalSearch: true, toggleFieldVisibility: (displayAs === 'table' || displayAs === 'advancedSearch') && toggleFieldVisibility, basicMode: true, additionalTableConfig, compositeKeys, viewName, parameters, searchFields, selectedValues, isAdvancedSearchAndSelect: displayAs === 'advancedSearch' }; const filters = (getPConnect().getRawMetadata() as any).config.promotedFilters ?? []; if (showPromotedFilters && filters.length > 0) { return ( ); } return ; } export default function SimpleTableSelect(props: SimpleTableSelectProps) { const SimpleTableManual = getComponentFromMap('SimpleTableManual'); const { getPConnect, renderMode = '' } = props; const pConn = getPConnect(); const { MULTI } = PCore.getConstants().LIST_SELECTION_MODE; const { selectionMode } = pConn.getConfigProps() as any; const isMultiSelectMode = selectionMode === MULTI; if (isMultiSelectMode && renderMode === 'ReadOnly') { return ; } return ; }