/* OpenBills-web - Web based libre billing software * Copyright (C) 2022 Vidhu Kant Sharma * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ import { Item, saveItem, editItem } from './../../classes/item'; import { Brand, getAllBrands } from './../../classes/brand'; import './scss/item-editor.scss'; import { useState, useEffect } from 'react'; const ItemEditor = (props) => { const [name, setName] = useState(props.item.Name); const [desc, setDesc] = useState(props.item.Description); const [HSN, setHSN] = useState(props.item.HSN); const [unit, setUnit] = useState(props.item.UnitOfMeasure); const [unitPrice, setUnitPrice] = useState(props.item.UnitPrice); const [gstP, setGSTP] = useState(props.item.GSTPercentage); const [minQty, setMinQty] = useState(props.item.MinQuantity); const [maxQty, setMaxQty] = useState(props.item.MaxQuantity); const [brand, setBrand] = useState(props.item.Brand); const [savedBrands, setSavedBrands] = useState([]); // get saved brands from API // needed by the brands dropdown menu useEffect(() => { // TODO: handle error getAllBrands(setSavedBrands, () => {}); }, []) const handleSubmit = (e) => { e.preventDefault(); const item = new Item(); item.Id = props.item.Id; item.Name = name; item.Description = desc; item.HSN = HSN; item.UnitOfMeasure = unit; item.UnitPrice = parseFloat(unitPrice); item.GSTPercentage = parseFloat(gstP); item.MinQuantity = parseFloat(minQty); item.MaxQuantity = parseFloat(maxQty); item.Brand = brand; // TODO: Save is for new items. implement modification too props.editing ? editItem(item, handleSuccess, handleFail) : saveItem(item, handleSuccess, handleFail); } const handleSuccess = () => { clearAll(); props.callback(); props.editing && props.hide(); } const handleFail = () => { alert("fail"); } const handleBrandSelect = (e) => { const b = savedBrands.filter(i => i.Id === e.target.value )[0]; setBrand(b ? b : new Brand()); } const clearAll = () => { setName(""); setDesc(""); setHSN(""); setUnit(""); setUnitPrice(0.00); setGSTP(0.00); setMinQty(0.00); setMaxQty(0.00); setBrand(new Brand()) } const handleCancel = () => { clearAll(); props.editing && props.hide(); } return (

{props.heading}

{savedBrands && savedBrands.length > 0 && }
); } export default ItemEditor;