Commit 7d32de39 authored by Ben Anderson's avatar Ben Anderson

Merge branch 'AFP-10' into dev

parents b5efca59 89697267
import React, { useState, useEffect } from "react";
import { Redirect, Switch } from "react-router"; import { Redirect, Switch } from "react-router";
import AuthRoute from "./AuthRoute"; import AuthRoute from "./AuthRoute";
import ProductForm from "./ProductForm"; import ProductForm from "./ProductForm";
import ProductGrid from "./ProductGrid"; import ProductIndex from "./ProductIndex";
import SearchResults from "./SearchResults"; import SearchResults from "./SearchResults";
import { getAllProducts } from "../actions/apiRequests.js";
import PromotionNewFormComponent from "./promotionforms/PromotionNewFormComponent"; import PromotionNewFormComponent from "./promotionforms/PromotionNewFormComponent";
import PromotionIndexComponent from "./promo_index/PromotionsIndexComponent"; import PromotionIndexComponent from "./promo_index/PromotionsIndexComponent";
export default function Main() { export default function Main() {
const [productData, setproductData] = useState([]);
useEffect(() => {
loadProducts();
}, []);
const loadProducts = async (event) => {
const data = await getAllProducts();
setproductData(data);
};
return ( return (
<div> <div>
...@@ -34,7 +22,7 @@ export default function Main() { ...@@ -34,7 +22,7 @@ export default function Main() {
path="/promos/new" path="/promos/new"
component={PromotionNewFormComponent} component={PromotionNewFormComponent}
></AuthRoute> ></AuthRoute>
<AuthRoute exact path="/products" component={ProductGrid}></AuthRoute> <AuthRoute exact path="/products" component={ProductIndex}></AuthRoute>
<AuthRoute path="/promos"> <AuthRoute path="/promos">
<PromotionIndexComponent /> <PromotionIndexComponent />
</AuthRoute> </AuthRoute>
......
...@@ -31,7 +31,7 @@ export default function ProductForm(props) { ...@@ -31,7 +31,7 @@ export default function ProductForm(props) {
} }
}); });
console.log(data); console.log(data);
setForm({ ...data, availableStock: data.stock }); setForm({ ...data });
}); });
} }
}); });
......
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import Product from "./Product.jsx"; import ProductTable from "./ProductTable.jsx"
import { Col, Container, Row } from "react-bootstrap";
import "./../styles/ProductGrid.css";
import Config from "../config.js"; import Config from "../config.js";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { deleteProduct } from "../actions/apiRequests";
export default function ProductGrid({ productData }) { export default function ProductIndex() {
const [products, setProducts] = useState([]); const [products, setProducts] = useState([]);
const fetchProducts = async () => { const fetchProducts = async () => {
...@@ -17,13 +14,6 @@ export default function ProductGrid({ productData }) { ...@@ -17,13 +14,6 @@ export default function ProductGrid({ productData }) {
} }
}; };
const handleDelete = (sku) => {
deleteProduct(sku)
.then(() => {
fetchProducts();
});
}
useEffect(() => fetchProducts(), []); useEffect(() => fetchProducts(), []);
return ( return (
...@@ -36,34 +26,10 @@ export default function ProductGrid({ productData }) { ...@@ -36,34 +26,10 @@ export default function ProductGrid({ productData }) {
+ New Product + New Product
</Link> </Link>
</div> </div>
<Container id="prod-grid" className="mt-3 mx-auto"> {products.length > 0
<Row xs={1} sm={2} md={3} lg={4}> ? <ProductTable productData={products} />
{products.map((product) => { : <p>No products found.</p>
return ( }
<Col key={product.sku}>
<Product product={product} handleDelete={() => handleDelete(product.sku)} />
</Col>
);
})}
</Row>
</Container>
</div> </div>
//uses vanilla bootstrap
// <div>
// <h1 id="title">Inventory</h1>
// <div className="container" id="prod-grid" >
// <div className="row row-cols-4">
// {productData.map((product) => {
// return (
// <div className="col" key={product.sku}>
// <Product product={product}/>
// </div>
// )
// })}
// </div>
// </div>
// </div>
); );
} }
import React, { useState } from "react"; import React, { useState } from "react";
import "./../styles/Product.css"; import "./../styles/ProductRow.css";
import { Modal, Button, Alert } from "react-bootstrap"; import { Modal, Button, Alert } from "react-bootstrap";
export default function Product({ product, handleDelete }) { export default function ProductRow({ product, handleDelete }) {
const [show, setShow] = useState(false); const [show, setShow] = useState(false);
const [showConfirm, setShowConfirm] = useState(false); const [showConfirm, setShowConfirm] = useState(false);
const handleClose = () => { const handleClose = () => {
setShow(false); setShow(false);
console.log({ show });
handleCloseConfirm(); handleCloseConfirm();
}; };
const handleCloseDelete = (sku) => { const handleCloseDelete = (sku) => {
handleDelete(sku) handleDelete(sku);
handleClose(); handleClose();
} };
const handleShow = () => setShow(true); const handleShow = () => setShow(true);
const handleShowConfirm = () => setShowConfirm(true); const handleShowConfirm = () => setShowConfirm(true);
const handleCloseConfirm = () => setShowConfirm(false); const handleCloseConfirm = () => setShowConfirm(false);
return ( return (
<div> <tr>
<div className="img-container" onClick={handleShow}> <td onClick={handleShow}>{product.sku}</td>
<img <td onClick={handleShow}>{product.upc}</td>
className="grid-img" <td onClick={handleShow}>{product.productName}</td>
src={product.productImageUrl} <td onClick={handleShow}>${product.price}</td>
alt={product.productName} <td onClick={handleShow}>{product.category}</td>
/> <td onClick={handleShow}>{product.availableStock}</td>
</div> <td onClick={handleShow}>{product.blockedStock}</td>
<div className="prod-info"> <td onClick={handleShow}>{product.fulfilledStock}</td>
<h5>{product.productName}</h5>
{product.sku}
<br />${product.price}
<br />
In Stock: {product.stock}
</div>
<Modal show={show} onHide={handleClose}> <Modal show={show} onHide={handleClose}>
<Modal.Header closeButton> <Modal.Header closeButton>
...@@ -51,7 +45,11 @@ export default function Product({ product, handleDelete }) { ...@@ -51,7 +45,11 @@ export default function Product({ product, handleDelete }) {
<br /> <br />
{product.productDescription} {product.productDescription}
<br /> <br />
In Stock: {product.stock} In Stock: {product.availableStock}
<br />
Blocked Stock: {product.blockedStock}
<br />
Fulfilled Stock: {product.fulfilledStock}
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>
...@@ -62,7 +60,6 @@ export default function Product({ product, handleDelete }) { ...@@ -62,7 +60,6 @@ export default function Product({ product, handleDelete }) {
> >
Delete product Delete product
</Button> </Button>
<Button variant="primary" href={`/products/edit/${product.sku}`}> <Button variant="primary" href={`/products/edit/${product.sku}`}>
Edit Product Edit Product
</Button> </Button>
...@@ -73,10 +70,15 @@ export default function Product({ product, handleDelete }) { ...@@ -73,10 +70,15 @@ export default function Product({ product, handleDelete }) {
Cancel Cancel
</Button> </Button>
&nbsp;&nbsp; &nbsp;&nbsp;
<Button variant="danger" onClick={() => handleCloseDelete(product.sku)}>Yes, delete</Button> <Button
variant="danger"
onClick={() => handleCloseDelete(product.sku)}
>
Yes, delete
</Button>
</Alert> </Alert>
</Modal.Footer> </Modal.Footer>
</Modal> </Modal>
</div> </tr>
); );
} }
import React, { useState, useEffect } from "react";
import ProductRow from "./ProductRow.jsx";
import { Container, Table } from "react-bootstrap";
import Config from "../config.js";
import { deleteProduct } from "../actions/apiRequests";
export default function ProductTable({ productData }) {
const [products, setProducts] = useState([productData]);
const fetchProducts = async () => {
const res = await fetch(`${Config.inventoryUrl}`);
if (res.ok) {
const data = await res.json();
setProducts([...data]);
}
};
const handleDelete = (sku) => {
deleteProduct(sku)
.then(() => {
fetchProducts();
});
}
useEffect(() => fetchProducts(), []);
return (
<Container id="prod-table" className="mt-3 mx-auto">
<Table>
<thead>
<tr>
<th>SKU</th>
<th>UPC</th>
<th>Product Name</th>
<th>Price</th>
<th>Category</th>
<th>Available Stock</th>
<th>Blocked Stock</th>
<th>Fulfilled Stock</th>
</tr>
</thead>
<tbody>
{products.map((product) => {
return (
<ProductRow key={product.sku} product={product} handleDelete={() => handleDelete(product.sku)} />
);
})}
</tbody>
</Table>
</Container>
);
}
import React from "react"; import React from "react";
import Product from "./Product.jsx"; import ProductRow from "./ProductRow.jsx";
import { Col, Container, Row } from "react-bootstrap"; import { Table } from "react-bootstrap";
import "./../styles/ProductGrid.css"; // import "./../styles/ProductTable.css";
export default class SearchResults extends React.Component{ export default class SearchResults extends React.Component {
constructor(props){ constructor(props) {
super(props); super(props);
this.state = { this.state = {
results: this.props.history.location.state.results results: this.props.history.location.state.results
}
} }
}
render(){ render() {
return ( return (
<div> <div className="container flex-column d-flex justify-content-center">
<h1 id="title" className="text-center" >Search Results</h1> <h1 id="title" className="text-center" >Search Results</h1>
<Container id="prod-grid" className="mt-3"> {this.state.results.length > 0 ?
<Row xs={1} sm={2} md={3} lg={4}> <Table>
{this.state.results.length > 0 ? this.state.results.map((product) => { <thead>
return ( <tr>
<Col key={product.sku}> <th>SKU</th>
<Product product={product} /> <th>Product Name</th>
</Col> <th>Price</th>
); <th>Category</th>
}) : <th>Available Stock</th>
<Col> <th>Blocked Stock</th>
<p>Unable to find any matching products.</p> <th>Fulfilled Stock</th>
</Col> </tr>
} </thead>
</Row> <tbody>
</Container> {this.state.results.map((product) => {
</div> return (
); <ProductRow key={product.sku} product={product} />
} );
})}
</tbody>
</Table>
:
<p>Unable to find any matching products.</p>
}
</div>
);
}
} }
\ No newline at end of file
...@@ -2,8 +2,6 @@ import {useState, useEffect} from 'react'; ...@@ -2,8 +2,6 @@ import {useState, useEffect} from 'react';
import Config from '../../config'; import Config from '../../config';
import "./promolistStyle.css"; import "./promolistStyle.css";
import { NavLink } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
import { getAllProducts } from "../../actions/apiRequests.js";
export default function PromotionIndexComponent () { export default function PromotionIndexComponent () {
......
...@@ -2,6 +2,6 @@ ...@@ -2,6 +2,6 @@
margin-left: 1em; margin-left: 1em;
} }
#prod-grid { #prod-table {
margin-left: 2em; margin-left: 5em;
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment