import { useLayoutEffect, useMemo } from 'react'; import { getReferenceList, buildView } from '@pega/react-sdk-components/lib/components/helpers/field-group-utils'; 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 FieldGroupTemplateProps extends PConnProps { // If any, enter additional props that only exist on this component referenceList?: any[]; contextClass: string; renderMode?: string; heading?: string; lookForChildInConfig?: boolean; displayMode?: string; fieldHeader?: string; allowTableEdit: boolean; } export default function FieldGroupTemplate(props: FieldGroupTemplateProps) { // Get emitted components from map (so we can get any override that may exist) const FieldGroup = getComponentFromMap('FieldGroup'); const FieldGroupList = getComponentFromMap('FieldGroupList'); const { referenceList = [], renderMode, contextClass, getPConnect, lookForChildInConfig, heading = '', displayMode, fieldHeader, allowTableEdit: allowAddEdit } = props; const pConn = getPConnect(); const resolvedList = getReferenceList(pConn); pConn.setReferenceList(resolvedList); const pageReference = `${pConn.getPageReference()}${resolvedList}`; const isReadonlyMode = renderMode === 'ReadOnly' || displayMode === 'DISPLAY_ONLY'; const HEADING = heading ?? 'Row'; useLayoutEffect(() => { if (!isReadonlyMode) { // @ts-expect-error - Expected 3 arguments, but got 1 pConn.getListActions().initDefaultPageInstructions(resolvedList); } }, [referenceList?.length]); const getDynamicHeaderProp = (item, index) => { if (fieldHeader === 'propertyRef' && heading && item[heading.substring(1)]) { return item[heading.substring(1)]; } return `Row ${index + 1}`; }; const addRecord = () => { if (PCore.getPCoreVersion()?.includes('8.7')) { pConn.getListActions().insert({ classID: contextClass }, referenceList.length, pageReference); } else { pConn.getListActions().insert({}, referenceList.length); } }; if (!isReadonlyMode) { const addFieldGroupItem = () => { addRecord(); }; const deleteFieldGroupItem = index => { if (PCore.getPCoreVersion()?.includes('8.7')) { pConn.getListActions().deleteEntry(index, pageReference); } else { pConn.getListActions().deleteEntry(index); } }; if (referenceList.length === 0 && allowAddEdit !== false) { addFieldGroupItem(); } const MemoisedChildren = useMemo(() => { return referenceList.map((item, index) => ({ id: index, name: fieldHeader === 'propertyRef' ? getDynamicHeaderProp(item, index) : `${HEADING} ${index + 1}`, children: buildView(pConn, index, lookForChildInConfig) })); }, [referenceList?.length]); return ( ); } pConn.setInheritedProp('displayMode', 'DISPLAY_ONLY'); const memoisedReadOnlyList = useMemo(() => { return referenceList.map((item, index) => { const key = item[heading] || `field-group-row-${index}`; return ( {buildView(pConn, index, lookForChildInConfig)} ); }); }, []); return
{memoisedReadOnlyList}
; }