ProductForm
ProductForm component client script is also using ReactJs and Ant Design react component library. This component renders the list of form to edit the product details. User can edit the details of the product and save them.
// components/ProductForm.js
const { useState, useEffect } = React;
const { Form, Input, Modal, Button, Space, Select, InputNumber } = antd;
const { MinusCircleOutlined, PlusOutlined } = antdIcons;
const ProductForm = ({ visible, onCreate, onCancel, editingProduct }) => {
const [form] = Form.useForm();
useEffect(() => {
form.setFieldsValue({
name: editingProduct?.name,
description: editingProduct?.description,
specifications: editingProduct?.specifications || []
});
}, [editingProduct, form]);
const handleChange = value => {
console.log(`selected ${value}`);
};
const options = [
{
label: "Nursary",
value: "Nursary"
},
{
label: "I",
value: "I"
},
{
label: "II",
value: "II"
}
];
return (
<Modal
visible={visible}
title={editingProduct ? "Edit Product" : "Create a new product"}
okText={editingProduct ? "Update" : "Create"}
onCancel={onCancel}
onOk={() => {
form
.validateFields()
.then(values => {
form.resetFields();
onCreate(values);
})
.catch(info => {
console.log("Validate Failed:", info);
});
}}
>
<Form
form={form}
layout="vertical"
initialValues={{ specifications: [{ key: "", value: "" }] }}
>
{/* Name and Description Fields */}
{/* ... */}
<Form.Item
name="title"
label="Product Title"
rules={[
{ required: true, message: "Please input the name of the product!" }
]}
>
<Input />
</Form.Item>
<Form.Item name="description" label="Description">
<Input type="textarea" />
</Form.Item>
<Form.Item name="category" label="Category">
<Select
mode="multiple"
allowClear
style={{
width: "100%"
}}
placeholder="Please select"
defaultValue={["all"]}
onChange={handleChange}
options={options}
/>
</Form.Item>
<Form.List name="stock">
{(fields, { add, remove }) => (
<>
{fields.map(({ key, name, fieldKey, ...restField }) => (
<Space
key={key}
style={{ display: "flex", marginBottom: 8 }}
align="baseline"
>
<Form.Item
{...restField}
name={[name, "quantity"]}
fieldKey={[fieldKey, "quantity"]}
rules={[
{
required: true,
message: "Please input quanity"
}
]}
>
<InputNumber placeholder="Quantity" />
</Form.Item>
<Form.Item
{...restField}
name={[name, "price"]}
fieldKey={[fieldKey, "price"]}
rules={[
{
required: true,
message: "Please input price"
}
]}
>
<InputNumber placeholder="Price" />
</Form.Item>
<MinusCircleOutlined onClick={() => remove(name)} />
</Space>
))}
<Form.Item>
<Button
type="dashed"
onClick={() => add()}
block
icon={<PlusOutlined />}
>
Add Stock Lines
</Button>
</Form.Item>
</>
)}
</Form.List>
</Form>
</Modal>
);
};
return ProductForm;
Last updated