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 (