Frontend Serverless with React and GraphQL
Start at the beginning and work your way through this project. The code for each step as well as the finished project can be found in the Github repository.
30. Add a Form TextInput
Objective: Create a GenerateTextInput component that will allow for users to enter a text block for recipe directions.
In this step, we will pretty much copy and paste the functionality of the <GenerateInput>
and use it for a new <GenerateTextInput>
component. The only different really is visually how the two input fields show up- input vs text-box. First let's create the <GenerateTextInput>
component:
components/GenerateFields.tsx
import { Row, Col, Form, Input } from 'antd';type InputType = {name: string;value: string;handleInputChange?: (event: any) => void;};export const GenerateInput = ({name,value,handleInputChange,}: InputType) => (<Row><Col span={12} offset={6}><Form.Item label={`${name}`}><Inputplaceholder={`${name}`}name={`${name}`}value={value}onChange={handleInputChange}/></Form.Item></Col></Row>);export const GenerateTextInput = ({name,value,handleInputChange,}: InputType) => (<Row><Col span={12} offset={6}><Form.Item label={`${name}`}><Input.TextAreaplaceholder={`${name}`}name={`${name}`}value={value}onChange={handleInputChange}/></Form.Item></Col></Row>);
Now let's add the title, description, and content fields and ensure that the forms work as expected. Enter dummy data into the fields and ensure that you can see a console.log of the data once the submit button is pressed.
components/CreateRecipe.tsx
import { Row, Col, Form, Button } from 'antd';import { submitForm } from '../utils/submitForm';import { GenerateInput, GenerateTextInput } from './GenerateFields';export const CreateRecipe = () => {const initiateCreateRecipe = () => {console.log('submitted form');console.log(inputs);};const { inputs, handleInputChange, handleSubmit } = submitForm({title: '',description: '',content: '',},initiateCreateRecipe,);return (<Form onFinish={handleSubmit}><GenerateInputname="title"value={inputs.title}handleInputChange={handleInputChange}/><GenerateInputname="description"value={inputs.description}handleInputChange={handleInputChange}/><GenerateTextInputname="content"value={inputs.content}handleInputChange={handleInputChange}/><Row><Col span={16} /><Col span={4}><Form.Item label="Create Recipe"><Button type="primary" htmlType="submit">Create Recipe</Button></Form.Item></Col></Row></Form>);};