import { useEffect, useState } from 'react';
import { TextField } from '@mui/material';
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
interface IntegerProps extends PConnFieldProps {
// If any, enter additional props that only exist on Integer here
}
export default function Integer(props: IntegerProps) {
// Get emitted components from map (so we can get any override that may exist)
const TextInput = getComponentFromMap('TextInput');
const FieldValueList = getComponentFromMap('FieldValueList');
const {
getPConnect,
label,
required,
disabled,
value = '',
validatemessage,
status,
readOnly,
testId,
helperText,
displayMode,
hideLabel,
placeholder
} = props;
const pConn = getPConnect();
const actions = pConn.getActionsApi();
const propName = (pConn.getStateProps() as any).value;
const helperTextToDisplay = validatemessage || helperText;
const [inputValue, setInputValue] = useState('');
useEffect(() => {
setInputValue(value);
}, [value]);
if (displayMode === 'DISPLAY_ONLY') {
return ;
}
if (displayMode === 'STACKED_LARGE_VAL') {
return ;
}
if (readOnly) {
return ;
}
const testProps: any = { 'data-test-id': testId };
function intOnChange(event) {
// console.log(`Integer intOnChange inValue: ${event.target.value}`);
// Disallow "." and "," (separators) since this is an integer field
// Mimics Pega Integer behavior (where separator characters are "eaten" if they're typed)
const disallowedChars = ['.', ','];
const theAttemptedValue = event.target.value;
const lastChar = theAttemptedValue.slice(-1);
if (disallowedChars.includes(lastChar)) {
event.target.value = theAttemptedValue.slice(0, -1);
}
// Pass through to the Constellation change handler
setInputValue(event.target.value);
}
function handleBlur() {
handleEvent(actions, 'changeNblur', propName, inputValue);
}
return (
);
}