From 5329b1fd16d0b8940f9526b523676dfb1cdbf317 Mon Sep 17 00:00:00 2001 From: MikunoNaka Date: Thu, 24 Jun 2021 15:53:42 +0530 Subject: switching to typescript --- src/components/Form/Items/AddNewItemForm.tsx | 219 +++++++++++++++++++++++++++ 1 file changed, 219 insertions(+) create mode 100644 src/components/Form/Items/AddNewItemForm.tsx (limited to 'src/components/Form/Items/AddNewItemForm.tsx') diff --git a/src/components/Form/Items/AddNewItemForm.tsx b/src/components/Form/Items/AddNewItemForm.tsx new file mode 100644 index 0000000..283d779 --- /dev/null +++ b/src/components/Form/Items/AddNewItemForm.tsx @@ -0,0 +1,219 @@ +/* + * OpenBills - Self hosted browser app to generate and keep track of simple invoices + * Version - 0 + * Licensed under the MIT license - https://opensource.org/licenses/MIT + * + * Copyright (c) 2021 Vidhu Kant Sharma +*/ + +import React, { useState } from "react"; +import "./../Form.scss"; +import { Item } from "../../../interfaces"; + +interface props { + savedItems: Item[] + addItem: (item: Item) => void + defGSTValue: number, + registerItemFormVisibility: any, + registerPersonFormVisibility: any +} + +const AddNewItemForm: React.FC = (props) => { + console.log(props) + const [itemNameValue, setItemNameValue] = useState(""); + const [itemDescValue, setItemDescValue] = useState(""); + const [itemPriceValue, setItemPriceValue] = useState(0.00); + const [itemDiscountValue, setItemDiscountValue] = useState(0.00); + const [itemGSTValue, setItemGSTValue] = useState(props.defGSTValue); + const [itemQTYValue, setItemQTYValue] = useState(1); + const [itemHSNValue, setItemHSNValue] = useState(0); + + // to be handled by DocumentInfo + // check if client is in same state + // and apply cgst+sgst or igst accordingly + // const inState: boolean = true; + + const enterItemNamePrompt: string = "start typing here"; + const registerItemPrompt: string = "add new"; + const emptyItemNames: any[] = [enterItemNamePrompt, registerItemPrompt, ""]; + + // set description and price if match found in DB + const applyItemInfo = (i: any) => { + setItemDescValue(i.Description); + setItemPriceValue(i.Price); + setItemHSNValue(i.HSN); + setItemGSTValue(i.GST); + } + + // check the item name value and do stuff accordingly + const setItemInfo = (itemName: any) => + (props.savedItems === null || itemName === registerItemPrompt) + ? props.registerItemFormVisibility(true) + : props.savedItems.some((i) => + itemName === i.Model.toLowerCase() && applyItemInfo(i)) + + const resetAllValues = () => { + setItemNameValue(""); + setItemDescValue(""); + setItemQTYValue(1); + setItemPriceValue(1); + setItemDiscountValue(0); + setItemHSNValue(0); + setItemGSTValue(props.defGSTValue); + } + + return ( +
+
{ + event.preventDefault(); + + // TODO: maybe move calculation of GST and Discount here + const newInvoiceItem: Item = { + Model: itemNameValue, + Description: itemDescValue, + Quantity: itemQTYValue, + UnitPrice: itemPriceValue, + TotalValue: (itemPriceValue * itemQTYValue), + Discount: itemDiscountValue, + HSN: itemHSNValue, + + // this also checks if igst applies or not + // TODO: fix this + sgst: 0, + cgst: 0, + igst: 0 + // sgst: inState ? parseInt(itemGSTValue) / 2 : "", + // cgst: inState ? parseInt(itemGSTValue) / 2 : "", + // igst: inState ? "" : parseInt(itemGSTValue) + } + props.addItem(newInvoiceItem); + + resetAllValues(); + } + }> +
+ + + +
+ +
+ + + + + + + + + +
+ +
+ props.registerPersonFormVisibility(true)} + /> + + props.registerItemFormVisibility(true)} + /> + + + + + + +
+
+
+ ) +} + +export default AddNewItemForm; -- cgit v1.2.3