CLEANUP Refactored parts order to use redux modals.

This commit is contained in:
Patrick Fic
2020-04-02 17:59:42 -07:00
parent 7254622f52
commit fe002b0dff
11 changed files with 306 additions and 177 deletions

View File

@@ -1,94 +1,106 @@
import { AutoComplete, DatePicker, Input, List, Radio } from "antd";
import { HeartFilled } from "@ant-design/icons";
import React, { useState } from "react";
import { DeleteFilled } from "@ant-design/icons";
import { DatePicker, Form, Input } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
export default function PartsOrderModalComponent({
vendorList,
state,
sendTypeState,
orderLinesState
sendTypeState
}) {
const [partsOrder, setPartsOrder] = state;
const [sendType, setSendType] = sendTypeState;
const orderLines = orderLinesState[0];
const [vendorComplete, setVendorComplete] = useState(vendorList);
const { t } = useTranslation();
const handleSearch = value => {
if (value === "") setVendorComplete(vendorList);
else
setVendorComplete(
vendorList.filter(v =>
v.name.toLowerCase().includes(value.toLowerCase())
)
);
};
const handleSelect = (value, option) => {
setPartsOrder({ ...partsOrder, vendorid: option.key });
};
return (
<div>
<AutoComplete
onSearch={handleSearch}
onSelect={handleSelect}
defaultOpen
backfill
optionLabelProp="value"
dataSource={vendorComplete}
placeholder={t("vendors.labels.search")}
<Form.Item
name="vendorid"
label={t("vendors.fields.name")}
rules={[
{
required: true,
message: t("general.validation.required")
}
]}
>
{vendorComplete.map(v => (
<AutoComplete.Option value={v.name} key={v.id}>
<div>{v.name}</div>
<div> {v.favorite ? <HeartFilled /> : null}</div>
</AutoComplete.Option>
))}
</AutoComplete>
{t("parts_orders.fields.deliver_by")}
<DatePicker
defaultValue={partsOrder.deliver_by}
onChange={e => {
setPartsOrder({ ...partsOrder, deliver_by: e });
}}
/>
<VendorSearchSelect options={vendorList} />
</Form.Item>
<Form.Item
name="deliver_by"
rules={[
{
required: true,
message: t("general.validation.required")
}
]}
label={t("parts_orders.fields.deliver_by")}
>
<DatePicker />
</Form.Item>
{t("parts_orders.labels.inthisorder")}
<List
itemLayout="horizontal"
dataSource={orderLines}
renderItem={item => (
<List.Item
actions={[
<Input placeholder={t("parts_orders.fields.lineremarks")} />
//TODO Editable table/adding line remarks to the order.
]}
>
{
// <List.Item.Meta
// avatar={
// <Avatar src='https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png' />
// }
// title={<a href='https://ant.design'>{item.name.last}</a>}
// description='Ant Design, a design language for background applications, is refined by Ant UED Team'
// />
}
<div>{`${item.line_desc}${
item.oem_partno ? " | " + item.oem_partno : ""
}`}</div>
</List.Item>
)}
/>
<Radio.Group
defaultValue={sendType}
onChange={e => setSendType(e.target.value)}
>
<Radio value={"e"}>{t("parts_orders.labels.email")}</Radio>
<Radio value={"p"}>{t("parts_orders.labels.print")}</Radio>
</Radio.Group>
<Form.List name={["parts_order_lines", "data"]}>
{(fields, { add, remove }) => {
return (
<div>
{fields.map((field, index) => (
<Form.Item required={false} key={field.key}>
<div style={{ display: "flex" }}>
<Form.Item
label={t("parts_orders.fields.line_desc")}
key={`${index}line_desc`}
name={[field.name, "line_desc"]}
rules={[
{
required: true,
message: t("general.validation.required")
}
]}
>
<Input />
</Form.Item>
<Form.Item
label={t("parts_orders.fields.line_remarks")}
key={`${index}line_remarks`}
name={[field.name, "line_remarks"]}
>
<Input />
</Form.Item>
<Form.Item
label={t("parts_orders.fields.db_price")}
key={`${index}db_price`}
name={[field.name, "db_price"]}
>
<CurrencyInput />
</Form.Item>
<Form.Item
label={t("parts_orders.fields.act_price")}
key={`${index}act_price`}
name={[field.name, "act_price"]}
>
<CurrencyInput />
</Form.Item>
<DeleteFilled
onClick={() => {
remove(field.name);
}}
/>
</div>
</Form.Item>
))}
</div>
);
}}
</Form.List>
</div>
);
}
// <Radio.Group
// defaultValue={sendType}
// onChange={e => setSendType(e.target.value)}
// >
// <Radio value={"e"}>{t("parts_orders.labels.email")}</Radio>
// <Radio value={"p"}>{t("parts_orders.labels.print")}</Radio>
// </Radio.Group>