diff options
Diffstat (limited to 'src/components/pickers/item-picker.js')
-rw-r--r-- | src/components/pickers/item-picker.js | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/src/components/pickers/item-picker.js b/src/components/pickers/item-picker.js index 46310db..339319f 100644 --- a/src/components/pickers/item-picker.js +++ b/src/components/pickers/item-picker.js @@ -10,8 +10,7 @@ * 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 +* You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ @@ -19,10 +18,11 @@ import { Item, InvoiceItem, getAllItems } from '../../classes/item'; import './scss/item-picker.scss'; import { useState, useEffect } from 'react'; +import { Link } from 'react-router-dom'; //import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' //import { faPhone, faEnvelope, faGlobe } from '@fortawesome/free-solid-svg-icons' -const ItemPicker = () => { +const ItemPicker = ({invoiceItems, addInvoiceItem}) => { const [items, setItems] = useState([new Item()]); const [item, setItem] = useState(new InvoiceItem()); @@ -44,30 +44,33 @@ const ItemPicker = () => { })); } + // add item to the invoice items list + const addItem = (e) => { + e.preventDefault(); + addInvoiceItem(item); + setItem(new InvoiceItem()); + } + + // input elements are sorted on the basis of + // how likely they are going to be edited return ( <div className={"picker-wrapper"}> <p className={"heading"}>Add an Item</p> - <div className={"item-picker"}> - {items && items.length > 0 && + <form className={"item-picker"} onSubmit={addItem}> + {items.length > 0 ? <> <label> Product/Service: <select value={item.Id ? item.Id : ""} onChange={handleItemSelect}> <option key="placeholder" value={""} disabled>Select an Item</option> {items.map(i => - <option key={i.Id} value={i.Id}>{i.Name}{i.Brand.Id === null ? "" : " - " + i.Brand.Name}</option> + <option key={i.Id} value={i.Id} disabled={invoiceItems.some(j => j.Id === i.Id)}> + {i.Name}{i.Brand.Id === null ? "" : " - " + i.Brand.Name} + </option> )} </select> </label> - <label> - Description: - <input - type="text" - value={item.Description} - name="Description" - onChange={handleInput} /> - </label> - <label> + <label className={"narrow"}> Quantity: <input type="number" @@ -77,7 +80,7 @@ const ItemPicker = () => { max={item.MaxQuantity} onChange={handleInput} /> </label> - <label> + <label className={"narrow"}> Price: <input type="number" @@ -85,7 +88,7 @@ const ItemPicker = () => { name="UnitPrice" onChange={handleInput} /> </label> - <label> + <label className={"narrow"}> Discount %: <input type="number" @@ -94,15 +97,22 @@ const ItemPicker = () => { onChange={handleInput} /> </label> <label> + Description: + <input + type="text" + value={item.Description} + name="Description" + onChange={handleInput} /> + </label> + <label className={"narrow"}> HSN: <input - className={"narrow"} type="text" value={item.HSN} name="HSN" onChange={handleInput} /> </label> - <label> + <label className={"narrow"}> GST %: <input type="number" @@ -110,9 +120,13 @@ const ItemPicker = () => { name="GSTPercentage" onChange={handleInput} /> </label> - </> + <input type="submit" value="Add"/> + </> : + <Link to="/manage/items"> + <input type="button" value="Add Items"/> + </Link> } - </div> + </form> <hr/> </div> ); |