Files
PeerScribe/components/Inputs/Inputs.tsx
abhay-raizada 6720585cf5 Add nested xml
2024-05-27 02:24:33 +05:30

106 lines
2.7 KiB
TypeScript

import {
DatePicker,
DatePickerView,
InputItem,
List,
Text,
TextareaItem,
View,
} from '@ant-design/react-native';
import {V1AnswerSettings, AnswerTypes} from '@formstr/sdk/dist/interfaces';
import {useState} from 'react';
import RNPickerSelect from 'react-native-picker-select';
interface InputFillerProps {
answerType: AnswerTypes;
answerSettings: V1AnswerSettings;
onChange: (answer: string) => void;
defaultValue?: string | number | boolean;
}
export const InputFiller: React.FC<InputFillerProps> = ({
answerType,
answerSettings,
onChange,
defaultValue,
}) => {
const [inputValue, setInputValue] = useState('');
const handleInputChange = (e: any) => {
console.log('E is', e);
setInputValue(e);
onChange(e);
};
const handleValueChange = (value: string) => {
if (!value) return;
setInputValue(value);
onChange(value);
};
const getInput = (
answerType: AnswerTypes,
answerSettings: V1AnswerSettings,
) => {
const dropdownItems = (answerSettings.choices || []).map(choice => {
return {
label: choice.label,
value: choice.choiceId,
key: choice.choiceId,
};
});
const INPUT_TYPE_COMPONENT_MAP: {[key in AnswerTypes]?: JSX.Element} = {
[AnswerTypes.label]: <></>,
[AnswerTypes.shortText]: (
<InputItem
onChange={handleValueChange}
defaultValue={defaultValue as string}
placeholder="enter a value..."
placeholderTextColor="#aaaaaa"></InputItem>
),
[AnswerTypes.paragraph]: (
<TextareaItem
rows={10}
placeholder="enter a value.."
placeholderTextColor="#aaaaaa"
onChange={handleInputChange}
autoHeight
style={{paddingVertical: 5}}
/>
),
[AnswerTypes.number]: <View></View>,
[AnswerTypes.radioButton]: <View></View>,
[AnswerTypes.checkboxes]: <View></View>,
[AnswerTypes.dropdown]: (
<RNPickerSelect
onValueChange={handleValueChange}
items={dropdownItems}
placeholder={{}}
key="picker"
value={inputValue}>
<Text>
{inputValue
? answerSettings.choices?.filter(choice => {
return choice.choiceId === inputValue;
})[0].label
: 'Select an option'}
</Text>
</RNPickerSelect>
),
[AnswerTypes.date]: (
<List>
<DatePicker key="Datepicker" />
</List>
),
[AnswerTypes.time]: (
<List>
<DatePicker key="time" />
</List>
),
};
return INPUT_TYPE_COMPONENT_MAP[answerType];
};
return <>{getInput(answerType, answerSettings)}</>;
};