mirror of
https://github.com/abhay-raizada/PeerScribe.git
synced 2026-04-26 08:14:03 +00:00
106 lines
2.7 KiB
TypeScript
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)}</>;
|
|
};
|