Skip to main content
added 28 characters in body
Source Link
<!DOCTYPE html>
<html>
<head>
    <title>Shopping Cart ES6</title>
</head>
<body>
<form name="order" id="order">
    <table>
        <tr>
            <td>
                <label for="productID">Product ID:</label>
            </td>
            <td>
                <input id="productID" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="product">Product Desc:</label>
            </td>
            <td>
                <input id="product_desc" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="quantity">Quantity:</label>
            </td>
            <td>
                <input type="number" id="quantity" name="quantity" width="196px" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="price">Price:</label>
            </td>
            <td>
                <input type="number" id="price" name="price" size="28" required/>
            </td>
        </tr>
    </table>
    <input type="reset" class="resetbtn" value="Reset" />
    <input type="button" id="btnAddProduct" value="Add New Product" >
</form>
<table border="1|1" id="products-table">
    <tr>
        <th>Product ID</th>
        <th>Product Description</th>
        <th>Quantity</th>
        <th>Price</th>
        <th>Action</th>
    </tr>
</table>
<br />
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>Shopping Cart ES6</title>
</head>
<body>
<form name="order" id="order">
    <table>
        <tr>
            <td>
                <label for="productID">Product ID:</label>
            </td>
            <td>
                <input id="productID" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="product">Product Desc:</label>
            </td>
            <td>
                <input id="product_desc" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="quantity">Quantity:</label>
            </td>
            <td>
                <input id="quantity" name="quantity" width="196px" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="price">Price:</label>
            </td>
            <td>
                <input id="price" name="price" size="28" required/>
            </td>
        </tr>
    </table>
    <input type="reset" class="resetbtn" value="Reset" />
    <input type="button" id="btnAddProduct" value="Add New Product" >
</form>
<table border="1|1" id="products-table">
    <tr>
        <th>Product ID</th>
        <th>Product Description</th>
        <th>Quantity</th>
        <th>Price</th>
        <th>Action</th>
    </tr>
</table>
<br />
</body>
</html>
<!DOCTYPE html>
<html>
<head>
    <title>Shopping Cart ES6</title>
</head>
<body>
<form name="order" id="order">
    <table>
        <tr>
            <td>
                <label for="productID">Product ID:</label>
            </td>
            <td>
                <input id="productID" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="product">Product Desc:</label>
            </td>
            <td>
                <input id="product_desc" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="quantity">Quantity:</label>
            </td>
            <td>
                <input type="number" id="quantity" name="quantity" width="196px" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="price">Price:</label>
            </td>
            <td>
                <input type="number" id="price" name="price" size="28" required/>
            </td>
        </tr>
    </table>
    <input type="reset" class="resetbtn" value="Reset" />
    <input type="button" id="btnAddProduct" value="Add New Product" >
</form>
<table border="1|1" id="products-table">
    <tr>
        <th>Product ID</th>
        <th>Product Description</th>
        <th>Quantity</th>
        <th>Price</th>
        <th>Action</th>
    </tr>
</table>
<br />
</body>
</html>
Source Link

as mentioned previously you are using a lot of ES6 already but you can clean things up a bit more and you seem to want to see it written so here is my attempt below.

I have added in what has been mentioned already as well as some other ES6 helpfullness such as string interpolation.

I have also added in a small bit of validation so that the product id is unique, should be expanded upon but is a start.

https://jsfiddle.net/hpyj1acs/

JavaScript

function renderProductsTable(e) {
    // delete all entries
    [...productsTable.children].slice(1).forEach(entry => productsTable.removeChild(entry));

    products.forEach(product => {
        let tr = document.createElement('tr');
        tr.innerHTML = `<td>${ product.productId }</td>
                        <td>${ product.desc }</td>
                        <td>${ product.qty }</td>
                        <td>${ product.price }</td>
                        <td>
                            <button id="${ product.productId }">Delete</button>
                            <button id="${ product.productId }">Add to Cart</button>
                        </td>`;

        productsTable.appendChild(tr);

        document.getElementById(product.productId).onclick = () => removeProduct(product.productId);
    });
}

function validProduct(){
    let productIsValid = true;
    products.forEach(product => {
        if(Object.values(product).includes(inputs.productId.value)){
            productIsValid = false;
        }else{
            productIsValid = !!(inputs.productId.value && inputs.desc.value && inputs.qty.value && inputs.price.value)
        }
    });
    return productIsValid;
}

function addProduct() {
    if(validProduct()){
        const product = {
            productId: inputs.productId.value,
            desc: inputs.desc.value,
            qty: inputs.qty.value,
            price: inputs.price.value
        };
        console.log(products);

        products.push(product);
        renderProductsTable();
        document.getElementById('order').reset();
    }
}

function removeProduct(product_id) {
    const index = products.findIndex(p => p.id === product_id);
    products.splice(index, 1);
    renderProductsTable();
}

const products = [];
const cart = [];
const inputs = {
    productId: document.getElementById("productID"),
    desc: document.getElementById("product_desc"),
    qty: document.getElementById("quantity"),
    price: document.getElementById("price")
};
const productsTable = document.getElementById("products-table");
const cartsTable = document.getElementById("carts-table");

document.getElementById('btnAddProduct').onclick = addProduct;

HTML

<!DOCTYPE html>
<html>
<head>
    <title>Shopping Cart ES6</title>
</head>
<body>
<form name="order" id="order">
    <table>
        <tr>
            <td>
                <label for="productID">Product ID:</label>
            </td>
            <td>
                <input id="productID" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="product">Product Desc:</label>
            </td>
            <td>
                <input id="product_desc" name="product" type="text" size="28" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="quantity">Quantity:</label>
            </td>
            <td>
                <input id="quantity" name="quantity" width="196px" required/>
            </td>
        </tr>
        <tr>
            <td>
                <label for="price">Price:</label>
            </td>
            <td>
                <input id="price" name="price" size="28" required/>
            </td>
        </tr>
    </table>
    <input type="reset" class="resetbtn" value="Reset" />
    <input type="button" id="btnAddProduct" value="Add New Product" >
</form>
<table border="1|1" id="products-table">
    <tr>
        <th>Product ID</th>
        <th>Product Description</th>
        <th>Quantity</th>
        <th>Price</th>
        <th>Action</th>
    </tr>
</table>
<br />
</body>
</html>