diff --git a/src/components/ProductRow.css b/src/components/ProductRow.css
new file mode 100644
index 0000000..1a50a33
--- /dev/null
+++ b/src/components/ProductRow.css
@@ -0,0 +1,21 @@
+.productRow {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-around;
+
+ border: none;
+
+ background-color: white;
+
+ font-size: 20px;
+
+ margin: 5px;
+}
+
+.available {
+ color: rgb(7, 7, 59);
+}
+
+.soldOut {
+ color: red;
+}
diff --git a/src/components/ProductRow.js b/src/components/ProductRow.js
new file mode 100644
index 0000000..cdd86fb
--- /dev/null
+++ b/src/components/ProductRow.js
@@ -0,0 +1,15 @@
+import './ProductRow.css';
+
+import React from 'react'
+
+export default function ProductRow(props) {
+
+ const inStock = props.inStock;
+
+ return (
+
+ | {props.name} |
+ {props.price} |
+
+ )
+}
diff --git a/src/components/ProductsPage.css b/src/components/ProductsPage.css
new file mode 100644
index 0000000..a76f274
--- /dev/null
+++ b/src/components/ProductsPage.css
@@ -0,0 +1,5 @@
+.title {
+ font-size: 50px;
+ font-family: Georgia, 'Times New Roman', Times, serif;
+ color: rgb(231, 54, 15)
+}
\ No newline at end of file
diff --git a/src/components/ProductsPage.js b/src/components/ProductsPage.js
new file mode 100644
index 0000000..29fc012
--- /dev/null
+++ b/src/components/ProductsPage.js
@@ -0,0 +1,33 @@
+import { useState } from 'react';
+
+import jsonData from './../data.json';
+
+import './ProductsPage.css';
+
+import SearchBar from './SearchBar';
+import ProductsTable from './ProductsTable';
+
+
+
+export default function ProductsPage() {
+
+ const [products, setProducts] = useState(jsonData);
+ const [searchString, setSearchString] = useState('');
+ const [isChecked, setIsChecked] = useState(false);
+
+ function onSearchChange(newSearchString) {
+ setSearchString(newSearchString);
+ }
+
+ function onCheck() {
+ setIsChecked(isChecked ? false : true);
+ }
+
+ return (
+
+ )
+}
diff --git a/src/components/ProductsTable.css b/src/components/ProductsTable.css
new file mode 100644
index 0000000..e06cd16
--- /dev/null
+++ b/src/components/ProductsTable.css
@@ -0,0 +1,37 @@
+.productsTable {
+ display: flex;
+ flex-flow: column nowrap;
+ justify-content: space-around;
+
+ border: none;
+
+ margin: 20px;
+}
+
+.tableHeader {
+ display: flex;
+ flex-flow: row nowrap;
+
+ font-size: 30px;
+ color: white;
+
+ background-color: rgb(212, 86, 40);
+}
+
+.rowContainer {
+ background-color: rgb(212, 212, 235);
+}
+
+.productInfo {
+ margin: 5px;
+ padding: 5px;
+
+ margin-left: 275px;
+}
+
+.productPrice {
+ margin-left: 0px;
+ padding-left: 0px;
+
+ margin-left: 600px;
+}
\ No newline at end of file
diff --git a/src/components/ProductsTable.js b/src/components/ProductsTable.js
new file mode 100644
index 0000000..be8cf92
--- /dev/null
+++ b/src/components/ProductsTable.js
@@ -0,0 +1,34 @@
+import './ProductsTable.css';
+
+import React from 'react';
+
+import ProductRow from './ProductRow';
+
+export default function ProductsTable(props) {
+ const products = props.data;
+ const searchString = props.searchString.toLowerCase();
+
+ let filteredProducts = products.filter((product) => {
+ return product.name.toLowerCase().startsWith(searchString);
+ });
+
+ // let inStockProducts = [];
+ if (props.isChecked) {
+ filteredProducts = filteredProducts.filter((product) => product.inStock)
+ }
+
+
+ return (
+
+
+
+ | Product Name |
+ Price |
+
+
+
+ {filteredProducts.map((product) =>
)}
+
+
+ )
+}
diff --git a/src/components/SearchBar.css b/src/components/SearchBar.css
new file mode 100644
index 0000000..5bde476
--- /dev/null
+++ b/src/components/SearchBar.css
@@ -0,0 +1,40 @@
+.searchBox {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ margin: 20px;
+
+ border: none;
+
+ background-color: rgb(200, 200, 224);
+}
+
+.searchHeading {
+ color: rgb(33, 33, 59);
+ font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
+ font-size: 35px;
+
+ margin: 10px;
+ margin-bottom: 5px;
+}
+
+.inputField {
+ width: 500px;
+ height: 30px;
+
+ font-size: 25px;
+
+ border: none;
+
+ margin: 10px;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+.checkBox {
+ margin: 10px;
+
+ font-size: 20px;
+ color: rgb(33, 33, 59);
+}
\ No newline at end of file
diff --git a/src/components/SearchBar.js b/src/components/SearchBar.js
new file mode 100644
index 0000000..25f6e8d
--- /dev/null
+++ b/src/components/SearchBar.js
@@ -0,0 +1,26 @@
+import React from 'react';
+
+import './SearchBar.css';
+
+export default function SearchBar({onSearchChange, onCheck}) {
+
+ function updateSearchString (event) {
+ const newSearchString = event.target.value;
+ onSearchChange(newSearchString);
+ }
+
+ function handleCheckBox () {
+ onCheck();
+ }
+
+ return (
+
+ )
+}