From a3766d07184dc86861df1b6afc3f5ea6fc7dbefc Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 00:32:29 +0800 Subject: [PATCH 1/6] Added github pages requirements --- package-lock.json | 177 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 ++ 2 files changed, 181 insertions(+) diff --git a/package-lock.json b/package-lock.json index 40e9e5e..f2fcfb9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,6 +38,9 @@ "styled-components": "^5.3.6", "typescript": "^4.9.5", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "gh-pages": "^5.0.0" } }, "node_modules/@adobe/css-tools": { @@ -5117,6 +5120,15 @@ "node": ">=8" } }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", @@ -7107,6 +7119,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.295.tgz", "integrity": "sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==" }, + "node_modules/email-addresses": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", + "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==", + "dev": true + }, "node_modules/emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -8318,6 +8336,32 @@ "node": ">=10" } }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/filesize": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", @@ -8778,6 +8822,94 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gh-pages": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-5.0.0.tgz", + "integrity": "sha512-Nqp1SjkPIB94Xw/3yYNTUL+G2dxlhjvv1zeN/4kMC1jfViTEqhtVz/Ba1zSXHuvXCN9ADNS1dN4r5/J/nZWEQQ==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "commander": "^2.18.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^8.1.0", + "globby": "^6.1.0" + }, + "bin": { + "gh-pages": "bin/gh-pages.js", + "gh-pages-clean": "bin/gh-pages-clean.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gh-pages/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/gh-pages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/gh-pages/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gh-pages/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/gh-pages/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -13007,6 +13139,27 @@ "node": ">=0.10.0" } }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -16048,6 +16201,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", @@ -16513,6 +16678,18 @@ "node": ">=8" } }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", diff --git a/package.json b/package.json index 40d5e2c..f143b98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "ivy-inventorymanager", "version": "0.1.0", + "homepage": "https://lemeow125.github.io/Ivy", "private": true, "dependencies": { "@emotion/react": "^11.10.5", @@ -57,5 +58,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "gh-pages": "^5.0.0" } } From e4d3926715a006671fa2f65ea8321d27ab17e8b2 Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 00:33:45 +0800 Subject: [PATCH 2/6] Some more tweaks for github pages --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index f143b98..04fec28 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,9 @@ "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "predeploy": "npm run build", + "deploy": "gh-pages -d build" }, "eslintConfig": { "extends": [ From 105b0ec1011c88830bfa6aee3b3e7b58438ab2d0 Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 00:37:30 +0800 Subject: [PATCH 3/6] Change url to point to pythonanywhere --- src/Components/Api/Api.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Api/Api.tsx b/src/Components/Api/Api.tsx index efa6b73..4814a26 100644 --- a/src/Components/Api/Api.tsx +++ b/src/Components/Api/Api.tsx @@ -10,7 +10,7 @@ import { // Product APIs // Local Testing "http://localhost:8000" // Remote Deploy "http://keannu125.pythonanywhere.com" -export const baseurl = "http://localhost:8000"; +export const baseurl = "http://keannu125.pythonanywhere.com"; export function GetProducts() { const token = JSON.parse(localStorage.getItem("token") || "{}"); From 83591429360863034bef5cc5ed5bc47ee60cb62e Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 00:52:06 +0800 Subject: [PATCH 4/6] Fixed base url --- src/App.tsx | 161 ++++++++++++++++++++++++++-------------------------- 1 file changed, 82 insertions(+), 79 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index e6dd886..1ed7437 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,85 +17,88 @@ import Register from "./Routes/Register/Register"; const queryClient = new QueryClient(); -const router = createBrowserRouter([ - { - path: "/", - element: ( - - - - ), - errorElement: ( - - - - ), - }, - { - path: "/Products", - element: ( - - - - ), - }, - { - path: "/Inventory", - element: ( - - - - ), - }, - { - path: "/Logs", - element: ( - - - - ), - }, - { - path: "/Login", - element: ( - - - - ), - }, - { - path: "/Product/:id", - element: ( - - - - ), - }, - { - path: "/Activation/:uid/:token", - element: ( - - - - ), - }, - { - path: "/NewProduct", - element: ( - - - - ), - }, - { - path: "/Register", - element: ( - - - - ), - }, -]); +const router = createBrowserRouter( + [ + { + path: "/", + element: ( + + + + ), + errorElement: ( + + + + ), + }, + { + path: "/Products", + element: ( + + + + ), + }, + { + path: "/Inventory", + element: ( + + + + ), + }, + { + path: "/Logs", + element: ( + + + + ), + }, + { + path: "/Login", + element: ( + + + + ), + }, + { + path: "/Product/:id", + element: ( + + + + ), + }, + { + path: "/Activation/:uid/:token", + element: ( + + + + ), + }, + { + path: "/NewProduct", + element: ( + + + + ), + }, + { + path: "/Register", + element: ( + + + + ), + }, + ], + { basename: "Ivy" } +); export default function App() { return ( From e5f048e14fddd34fb5bab880bb95953361c3c113 Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 00:54:59 +0800 Subject: [PATCH 5/6] Changed to https for api url --- src/Components/Api/Api.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Components/Api/Api.tsx b/src/Components/Api/Api.tsx index 4814a26..da991df 100644 --- a/src/Components/Api/Api.tsx +++ b/src/Components/Api/Api.tsx @@ -9,8 +9,8 @@ import { // Product APIs // Local Testing "http://localhost:8000" -// Remote Deploy "http://keannu125.pythonanywhere.com" -export const baseurl = "http://keannu125.pythonanywhere.com"; +// Remote Deploy "https://keannu125.pythonanywhere.com" +export const baseurl = "https://keannu125.pythonanywhere.com"; export function GetProducts() { const token = JSON.parse(localStorage.getItem("token") || "{}"); From 91db76cb50e85b85aebf62ac7f439fc390777373 Mon Sep 17 00:00:00 2001 From: keannu125 Date: Fri, 10 Mar 2023 12:55:54 +0800 Subject: [PATCH 6/6] Polished APIs in preparation for online deployment --- src/App.tsx | 161 ++++++++++++++++++------------------- src/Components/Api/Api.tsx | 90 ++++++++++++--------- 2 files changed, 130 insertions(+), 121 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 1ed7437..e6dd886 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -17,88 +17,85 @@ import Register from "./Routes/Register/Register"; const queryClient = new QueryClient(); -const router = createBrowserRouter( - [ - { - path: "/", - element: ( - - - - ), - errorElement: ( - - - - ), - }, - { - path: "/Products", - element: ( - - - - ), - }, - { - path: "/Inventory", - element: ( - - - - ), - }, - { - path: "/Logs", - element: ( - - - - ), - }, - { - path: "/Login", - element: ( - - - - ), - }, - { - path: "/Product/:id", - element: ( - - - - ), - }, - { - path: "/Activation/:uid/:token", - element: ( - - - - ), - }, - { - path: "/NewProduct", - element: ( - - - - ), - }, - { - path: "/Register", - element: ( - - - - ), - }, - ], - { basename: "Ivy" } -); +const router = createBrowserRouter([ + { + path: "/", + element: ( + + + + ), + errorElement: ( + + + + ), + }, + { + path: "/Products", + element: ( + + + + ), + }, + { + path: "/Inventory", + element: ( + + + + ), + }, + { + path: "/Logs", + element: ( + + + + ), + }, + { + path: "/Login", + element: ( + + + + ), + }, + { + path: "/Product/:id", + element: ( + + + + ), + }, + { + path: "/Activation/:uid/:token", + element: ( + + + + ), + }, + { + path: "/NewProduct", + element: ( + + + + ), + }, + { + path: "/Register", + element: ( + + + + ), + }, +]); export default function App() { return ( diff --git a/src/Components/Api/Api.tsx b/src/Components/Api/Api.tsx index da991df..94fa33e 100644 --- a/src/Components/Api/Api.tsx +++ b/src/Components/Api/Api.tsx @@ -10,105 +10,122 @@ import { // Product APIs // Local Testing "http://localhost:8000" // Remote Deploy "https://keannu125.pythonanywhere.com" -export const baseurl = "https://keannu125.pythonanywhere.com"; - +axios.defaults.baseURL = "https://keannu125.pythonanywhere.com"; +const token = JSON.parse(localStorage.getItem("token") || "{}"); export function GetProducts() { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/products/", { + .get("/api/v1/products/", { headers: { Authorization: "Token " + token, }, }) .then((response) => { + console.log("Queried products successfully"); return response.data; + }) + .catch((error) => { + console.log("Error querying products"); + return error; }); } export function GetProduct(id: number) { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/products/" + id + "/", { + .get("/api/v1/products/" + id + "/", { headers: { Authorization: "Token " + token, }, }) .then((response) => { + console.log("Queried product successfully"); return response.data; + }) + .catch((error) => { + console.log("Error querying product"); + return error; }); } export function UpdateProduct(product: UpdateProductParams) { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .patch(baseurl + "/api/v1/products/" + product.id + "/", product, { + .patch("/api/v1/products/" + product.id + "/", product, { headers: { Authorization: "Token " + token, }, }) .then((response) => { - console.log("Product update successful", response.data); + console.log("Product update successful"); return response.data; }) .catch((error) => { - console.log("Error updating product", error.response); + console.log("Error updating product"); return error; }); } export function GetLowestStockedProduct() { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/lowest_stock_product/", { + .get("/api/v1/lowest_stock_product/", { headers: { Authorization: "Token " + token, }, }) .then((response) => { + console.log("Queried lowest stocekd product successfully"); return response.data; + }) + .catch((error) => { + console.log("Error querying lowest stocked product"); }); } export function GetLogs() { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/logs/", { + .get("/api/v1/logs/", { headers: { Authorization: "Token " + token, }, }) .then((response) => { + console.log("Queried logs successfully"); return response.data; + }) + .catch((error) => { + console.log("Error querying logs"); + return error; }); } export function AddProduct(note: AddProductParams) { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .post(baseurl + "/api/v1/products/", note, { + .post("/api/v1/products/", note, { headers: { Authorization: "Token " + token, }, }) .then((response) => { + console.log("Added product successfully"); return response.data; }) .catch((error) => { - console.log("Error adding product", error.response); + console.log("Error adding product"); return error; }); } export function DeleteProduct(id: number) { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .delete(baseurl + "/api/v1/products/" + id + "/", { + .delete("/api/v1/products/" + id + "/", { headers: { Authorization: "Token " + token, }, }) + .then((response) => { + console.log("Deleted product successfully"); + return response; + }) .catch((error) => { - console.log("Error deleting product", error.response); + console.log("Error deleting product"); return error; }); } @@ -117,79 +134,74 @@ export function DeleteProduct(id: number) { export function UserRegister(register: RegistrationParams) { return axios - .post(baseurl + "/api/v1/accounts/users/", register) + .post("/api/v1/accounts/users/", register) .then(async (response) => { - console.log(response.data); + console.log("Registration success"); return true; }) .catch((error) => { - console.log("Registration failed: " + error.response); + console.log("Registration failed"); return false; }); } export function UserLogin(user: LoginParams) { return axios - .post(baseurl + "/api/v1/accounts/token/login/", user) + .post("/api/v1/accounts/token/login/", user) .then(async (response) => { localStorage.setItem("token", JSON.stringify(response.data.auth_token)); - console.log( - "Login Success! Stored Token: ", - JSON.parse(localStorage.getItem("token") || "{}") - ); + console.log("Login Success!"); return true; }) .catch((error) => { - console.log("Login Failed: " + error.response); + console.log("Login Failed"); return false; }); } export function UserInfo() { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/accounts/users/me/", { + .get("/api/v1/accounts/users/me/", { headers: { Authorization: "Token " + token, }, }) .then((response) => { - console.log(response.data); + console.log("Success querying self info"); return response.data; }) .catch((error) => { - console.log("Error retrieving user data", error.response); + console.log("Error querying self info"); return false; }); } export function QueryUser(id: number) { - const token = JSON.parse(localStorage.getItem("token") || "{}"); return axios - .get(baseurl + "/api/v1/user_list/" + id, { + .get("/api/v1/user_list/" + id, { headers: { Authorization: "Token " + token, }, }) .then((response) => { - console.log("Querying one user...", response.data); + console.log("Success querying user"); return response.data; }) .catch((error) => { - console.log("Error retrieving single user data", error.response); + console.log("Error querying user"); return false; }); } export function UserActivate(activation: ActivationParams) { return axios - .post(baseurl + "/api/v1/accounts/users/activation/", activation) + .post("/api/v1/accounts/users/activation/", activation) .then(async (response) => { console.log("Activation Success"); return true; }) .catch((error) => { - console.log("Activation failed: " + error.response); + console.log("Activation failed"); return false; }); }