diff --git a/.firebase/hosting.YnVpbGQ.cache b/.firebase/hosting.YnVpbGQ.cache index ae12cf6..81b43b6 100644 --- a/.firebase/hosting.YnVpbGQ.cache +++ b/.firebase/hosting.YnVpbGQ.cache @@ -1,14 +1,14 @@ -asset-manifest.json,1697104029175,e8af32a74db96014836e6d7d329ad9291e0957e13c014aaf34a5baa9d2d28699 -favicon.ico,1697104023603,b72f7455f00e4e58792d2bca892abb068e2213838c0316d6b7a0d6d16acd1955 -logo192.png,1697104023603,caff018b7f1e8fd481eb1c50d75b0ef236bcd5078b1d15c8bb348453fee30293 -robots.txt,1697104023604,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2 -manifest.json,1697104023604,341d52628782f8ac9290bbfc43298afccb47b7cbfcee146ae30cf0f46bc30900 -index.html,1697104029175,093a3f2d2d4f25a31f4cbce19cb6a773764b0b89a9e0df06f509f6e4e4800fde -static/css/main.e6c13ad2.css,1697104029178,3e50f5e92915159fd2c8de23f1536cfb9f445223478cfa70edb3a6fbfe5dbf03 -static/css/main.e6c13ad2.css.map,1697104029178,d99304e41fcd2e6d3aadd9df8d45fbb4b7935a1f7a03b1a272a8f0477725a7fa -static/js/787.cda612ba.chunk.js,1697104029178,285a5e985a146d7a2168e584ea82acb2a74488fa6ba9531956f59780bb9618a1 -static/js/main.8fa98648.js.LICENSE.txt,1697104029178,e725950f46c70f98e1ff23e12070bad9360c4fd717d614a0e42acca066479917 -logo512.png,1697104023604,191fc21360b4ccfb1cda11a1efb97f489ed22672ca83f4064316802bbfdd750e -static/js/787.cda612ba.chunk.js.map,1697104029178,065e1a2d8649dcdfcad4af1bd535dbe134e6aee9815c5a55b3610294877ea353 -static/js/main.8fa98648.js,1697104029178,a2dc1b99760a36a1e6ec204bbfe23cc0e9640f1d38ffdaa99b1650a0a25b6b6a -static/js/main.8fa98648.js.map,1697104029178,12496653c344f3593fe10543471c115c13684376b3953048a65c8a857a0561b5 +asset-manifest.json,1697102668138,e8af32a74db96014836e6d7d329ad9291e0957e13c014aaf34a5baa9d2d28699 +manifest.json,1697102660081,341d52628782f8ac9290bbfc43298afccb47b7cbfcee146ae30cf0f46bc30900 +logo192.png,1697102660081,caff018b7f1e8fd481eb1c50d75b0ef236bcd5078b1d15c8bb348453fee30293 +robots.txt,1697102660082,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2 +favicon.ico,1697102660081,b72f7455f00e4e58792d2bca892abb068e2213838c0316d6b7a0d6d16acd1955 +index.html,1697102668138,093a3f2d2d4f25a31f4cbce19cb6a773764b0b89a9e0df06f509f6e4e4800fde +static/css/main.e6c13ad2.css,1697102668142,3e50f5e92915159fd2c8de23f1536cfb9f445223478cfa70edb3a6fbfe5dbf03 +static/css/main.e6c13ad2.css.map,1697102668143,d99304e41fcd2e6d3aadd9df8d45fbb4b7935a1f7a03b1a272a8f0477725a7fa +static/js/main.8fa98648.js.LICENSE.txt,1697102668142,e725950f46c70f98e1ff23e12070bad9360c4fd717d614a0e42acca066479917 +logo512.png,1697102660081,191fc21360b4ccfb1cda11a1efb97f489ed22672ca83f4064316802bbfdd750e +static/js/787.cda612ba.chunk.js,1697102668142,285a5e985a146d7a2168e584ea82acb2a74488fa6ba9531956f59780bb9618a1 +static/js/787.cda612ba.chunk.js.map,1697102668143,065e1a2d8649dcdfcad4af1bd535dbe134e6aee9815c5a55b3610294877ea353 +static/js/main.8fa98648.js,1697102668142,a2dc1b99760a36a1e6ec204bbfe23cc0e9640f1d38ffdaa99b1650a0a25b6b6a +static/js/main.8fa98648.js.map,1697102668143,12496653c344f3593fe10543471c115c13684376b3953048a65c8a857a0561b5 diff --git a/.firebase/hosting.eWVz.cache b/.firebase/hosting.eWVz.cache new file mode 100644 index 0000000..a73b153 --- /dev/null +++ b/.firebase/hosting.eWVz.cache @@ -0,0 +1 @@ +index.html,1697101281956,9784ba4d422ef8819091c9ca8849a38582cb345e8af086ad455e26edccdb0982 diff --git a/database.rules.json b/database.rules.json new file mode 100644 index 0000000..f54493d --- /dev/null +++ b/database.rules.json @@ -0,0 +1,7 @@ +{ + /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */ + "rules": { + ".read": false, + ".write": false + } +} \ No newline at end of file diff --git a/firebase.json b/firebase.json index 340ed5b..d2392af 100644 --- a/firebase.json +++ b/firebase.json @@ -1,11 +1,10 @@ { + "database": { + "rules": "database.rules.json" + }, "hosting": { "public": "build", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], + "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], "rewrites": [ { "source": "**", diff --git a/package-lock.json b/package-lock.json index d2f5ef6..eab6c3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,16 @@ "@testing-library/user-event": "^13.5.0", "antd": "^5.9.4", "compose-function": "^3.0.3", + "nprogress": "^0.2.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^6.16.0", "react-router-dom": "^6.16.0", "react-scripts": "5.0.1", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "gh-pages": "^6.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -5379,6 +5383,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.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -7365,6 +7378,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz", "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==" }, + "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", @@ -8537,6 +8556,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", @@ -8994,6 +9039,79 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gh-pages": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.0.0.tgz", + "integrity": "sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==", + "dev": true, + "dependencies": { + "async": "^3.2.4", + "commander": "^11.0.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^11.1.1", + "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": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/gh-pages/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -12876,6 +12994,11 @@ "node": ">=8" } }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -13298,6 +13421,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.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -16979,6 +17123,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.3", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", @@ -17480,6 +17636,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", @@ -22607,6 +22775,12 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, + "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 + }, "array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -24056,6 +24230,12 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz", "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==" }, + "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 + }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", @@ -24937,6 +25117,23 @@ } } }, + "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 + }, + "filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, "filesize": { "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", @@ -25246,6 +25443,62 @@ "get-intrinsic": "^1.1.1" } }, + "gh-pages": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-6.0.0.tgz", + "integrity": "sha512-FXZWJRsvP/fK2HJGY+Di6FRNHvqFF6gOIELaopDjXXgjeOYSNURcuYwEO/6bwuq6koP5Lnkvnr5GViXzuOB89g==", + "dev": true, + "requires": { + "async": "^3.2.4", + "commander": "^11.0.0", + "email-addresses": "^5.0.0", + "filenamify": "^4.3.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "^11.1.1", + "globby": "^6.1.0" + }, + "dependencies": { + "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, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "commander": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "dev": true + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "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, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + } + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -28047,6 +28300,11 @@ "path-key": "^3.0.0" } }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -28346,6 +28604,21 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" }, + "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 + }, + "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, + "requires": { + "pinkie": "^2.0.0" + } + }, "pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -30825,6 +31098,15 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, + "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, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", @@ -31193,6 +31475,15 @@ "punycode": "^2.1.1" } }, + "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, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "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 e3498d3..638d0a8 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@testing-library/user-event": "^13.5.0", "antd": "^5.9.4", "compose-function": "^3.0.3", + "nprogress": "^0.2.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^6.16.0", @@ -17,6 +18,8 @@ "web-vitals": "^2.1.4" }, "scripts": { + "predeploy": "npm run build", + "deploy": "gh-pages -d build", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", @@ -39,5 +42,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "gh-pages": "^6.0.0" } } diff --git a/public/bashmohands-logo.svg b/public/bashmohands-logo.svg new file mode 100644 index 0000000..6fcce3d --- /dev/null +++ b/public/bashmohands-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777c..0000000 Binary files a/public/favicon.ico and /dev/null differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..cd97a88 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a..0000000 Binary files a/public/logo192.png and /dev/null differ diff --git a/public/logo512.png b/public/logo512.png deleted file mode 100644 index a4e47a6..0000000 Binary files a/public/logo512.png and /dev/null differ diff --git a/src/App.js b/src/App.js new file mode 100644 index 0000000..c0a46de --- /dev/null +++ b/src/App.js @@ -0,0 +1,46 @@ +import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import ProfilePage from "./pages/profile"; +import BaseLayout from "./app/layouts/baseLayout"; +import NotFound from "./pages/404"; +import HomePage from "./pages/home"; +import Account from "./pages/account"; +import AboutPage from "./pages/about"; +import AllSessions from "./pages/session/AllSessions"; +import SingleSession from "./pages/session/SingleSession"; + +const router = createBrowserRouter([ + { + // Home & General Pages + path: "/", + element: , + errorElement: , + children: [ + { index: true, element: }, + { path: "/about", element: }, + ], + }, // End Home & General Pages + { + // Protected Pages + path: "/:handler/account", + element: , + errorElement: , + children: [ + { index: true, element: }, + { path: "/:handler/account/sessions", element: }, + { path: "/:handler/account/session/:id", element: }, + ], + }, // End Protected Pages + { + // Profile Page by Handler + path: "/:handler", + element: , + errorElement: , + children: [{ index: true, element: }], + }, +]); + +function App() { + return ; +} + +export default App; diff --git a/src/app/index.css b/src/app/index.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/index.js b/src/app/index.js deleted file mode 100644 index 8021a80..0000000 --- a/src/app/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import { Routing } from "../pages"; -import { withProviders } from "./providers"; -import "./index.css"; - -const App = () => { - return ( -
- -
- ); -}; - -export default withProviders(App); diff --git a/src/app/layouts/baseLayout.js b/src/app/layouts/baseLayout.js new file mode 100644 index 0000000..7360830 --- /dev/null +++ b/src/app/layouts/baseLayout.js @@ -0,0 +1,29 @@ +import { Outlet } from "react-router-dom"; +import { ConfigProvider, Layout } from "antd"; +import Header from "../../components/Header"; + +const { Content } = Layout; + +export default function BaseLayout() { + // const [showModel, setShow] + return ( +
+ +
+ + + + +
+ ); +} diff --git a/src/app/providers/index.js b/src/app/providers/index.js deleted file mode 100644 index dc7ad02..0000000 --- a/src/app/providers/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import compose from "compose-function"; -import { withRouter } from "./with-route"; - -export const withProviders = compose(withRouter); diff --git a/src/app/providers/with-route.js b/src/app/providers/with-route.js deleted file mode 100644 index 46e360f..0000000 --- a/src/app/providers/with-route.js +++ /dev/null @@ -1,14 +0,0 @@ -import { Suspense } from "react"; -import { BrowserRouter } from "react-router-dom"; -import { Spin } from "antd"; - -export const withRouter = (component) => () => - ( - - } - > - {component()} - - - ); diff --git a/src/components/Header.css b/src/components/Header.css new file mode 100644 index 0000000..6c3558f --- /dev/null +++ b/src/components/Header.css @@ -0,0 +1,22 @@ +.ant-menu-horizontal { + border-bottom: none; +} + +/** Customize the progress bar + * This overrides the node_modules/nprogress/nprogress.css file +*/ + +/* Make clicks pass-through */ +#nprogress .bar { + background: #da005c !important; +} + +/* Fancy blur effect */ +#nprogress .peg { + box-shadow: 0 0 10px #da005c, 0 0 5px #da005c !important; +} + +#nprogress .spinner-icon { + border-top-color: #da005c !important; + border-left-color: #da005c !important; +} diff --git a/src/components/Header.js b/src/components/Header.js new file mode 100644 index 0000000..a8dedca --- /dev/null +++ b/src/components/Header.js @@ -0,0 +1,129 @@ +import "./Header.css"; +// import { useState } from "react"; +import { Link, useNavigation, useLocation } from "react-router-dom"; +import { useEffect, useState } from "react"; + +import NProgress from "nprogress"; +import "nprogress/nprogress.css"; + +import { Layout, Menu, ConfigProvider, Row, Col, Button } from "antd"; +const { Header } = Layout; + +const MainNav = () => { + // Routing progress bar setup + const navigation = useNavigation(); + const location = useLocation(); + + useEffect(() => { + NProgress.start(); + if (navigation.state === "idle") NProgress.done(); + }, [location]); // Watch for router location + + return ( + +
+ + +
+ + logo + +
+ + + + + + Home + + + + + Instructors + + + + + My Sessions + + + + + + + +
+
+
+ ); +}; + +export default MainNav; diff --git a/src/components/Search.css b/src/components/Search.css new file mode 100644 index 0000000..468365a --- /dev/null +++ b/src/components/Search.css @@ -0,0 +1,3 @@ +.searchbox input::placeholder { + color: #17080e; +} diff --git a/src/components/Search.js b/src/components/Search.js new file mode 100644 index 0000000..1a1f07b --- /dev/null +++ b/src/components/Search.js @@ -0,0 +1,92 @@ +import React, { useEffect, useState } from "react"; +import { LockOutlined, SearchOutlined } from "@ant-design/icons"; +import { Button, Form, Input, Row, Col } from "antd"; +import "./Search.css"; + +const Search = () => { + const [form] = Form.useForm(); + const [clientReady, setClientReady] = useState(false); + + // To disable submit button at the beginning. + useEffect(() => { + setClientReady(true); + }, []); + const onFinish = (values) => { + console.log("Finish:", values); + }; + return ( +
+ + + + } + placeholder="Search by company, role, name..." + style={{ + height: "66px", + borderRadius: "12px", + fontSize: "16px", + padding: "17px 22px", + }} + /> + + + + + + + } + type="password" + placeholder="Password" + /> + + + + + {() => ( + + )} + + + + + +
+ ); +}; +export default Search; diff --git a/src/index.css b/src/index.css index ec2585e..4040a6f 100644 --- a/src/index.css +++ b/src/index.css @@ -1,13 +1,53 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; +@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@100;400;700&display=swap"); + +* { + box-sizing: border-box; + font-family: "Montserrat", sans-serif; +} + +:root { + /* font-family: "Montserrat", sans-serif; */ + font-size: 16px; + line-height: 24px; + font-weight: 400; + + /* color-scheme: light; */ + /* color: rgba(255, 255, 255, 0.87); */ + background-color: #fff; + + font-synthesis: none; + text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; + + --color-gray-100: #f4f3f1; + --color-gray-200: #dddbd8; + --color-gray-300: #ccc9c6; + --color-gray-400: #aeaba7; + --color-gray-500: #8a8784; + --color-gray-600: #656360; + --color-gray-700: #4b4a47; + --color-gray-800: #31302e; + --color-gray-900: #1f1d1b; + + --color-primary-100: #fcf3e1; + --color-primary-200: #fceccd; + --color-primary-300: #fae1af; + --color-primary-400: #fbd997; + --color-primary-500: #ffd37c; + --color-primary-600: #f9c762; + --color-primary-700: #fbc14d; + --color-primary-800: #fab833; + --color-primary-900: #f6ad1b; } -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; +body { + margin: 0; +} + +ul { + list-style: none; + margin: 0; + padding: 0; } diff --git a/src/index.js b/src/index.js index 763abb5..31508db 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,7 @@ import React from "react"; import ReactDOM from "react-dom/client"; import "./index.css"; -import App from "./app"; -import reportWebVitals from "./reportWebVitals"; +import App from "./App"; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( @@ -10,8 +9,3 @@ root.render( ); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/pages/404/index.js b/src/pages/404/index.js new file mode 100644 index 0000000..36c1239 --- /dev/null +++ b/src/pages/404/index.js @@ -0,0 +1,3 @@ +export default function NotFound() { + return
Eror 404 Not Found!
; +} diff --git a/src/pages/about/index.js b/src/pages/about/index.js new file mode 100644 index 0000000..364d329 --- /dev/null +++ b/src/pages/about/index.js @@ -0,0 +1,3 @@ +export default function AboutPage() { + return
About Page
; +} diff --git a/src/pages/account/index.js b/src/pages/account/index.js new file mode 100644 index 0000000..5d54bbf --- /dev/null +++ b/src/pages/account/index.js @@ -0,0 +1,3 @@ +export default function Account() { + return
Account Page
; +} diff --git a/src/pages/home/Home.module.css b/src/pages/home/Home.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/pages/home/index.js b/src/pages/home/index.js index a8dbf3e..fc9465b 100644 --- a/src/pages/home/index.js +++ b/src/pages/home/index.js @@ -1,7 +1,28 @@ -import "./Home.module.css"; +import { Button, message } from "antd"; +import Search from "../../components/Search"; -const HomePage = () => { - return
Home Page
; -}; +export default function HomePage() { + const [messageApi, contextHolder] = message.useMessage(); -export default HomePage; + function showNotification() { + messageApi.open({ + type: "success", + content: "This is a prompt message with custom className and style", + className: "custom-class", + style: { + marginTop: "80vh", + }, + }); + } + + return ( +
+

+ Search instructors +

+ + {contextHolder} + +
+ ); +} diff --git a/src/pages/index.js b/src/pages/index.js deleted file mode 100644 index 288ef67..0000000 --- a/src/pages/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// lazily load components, which means they are loaded only when they are needed. -import { lazy } from "react"; - -// defining routing behavior. -import { Route, Routes, Navigate } from "react-router-dom"; -import HomePage from "./home"; -import ProfilePage from "./profile"; - -// const HomePage = lazy(() => import("./home")); -// const ProfilePage = lazy(() => import("./profile")); - -export const Routing = () => { - return ( - - } /> - } /> - {/* */} - - ); -}; diff --git a/src/pages/profile/Profile.module.css b/src/pages/profile/Profile.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/pages/profile/index.js b/src/pages/profile/index.js index 505124a..ab54b8e 100644 --- a/src/pages/profile/index.js +++ b/src/pages/profile/index.js @@ -1,7 +1,3 @@ -import "./Profile.module.css"; - -const ProfilePage = () => { +export default function ProfilePage() { return
Profile Page
; -}; - -export default ProfilePage; +} diff --git a/src/pages/session/AllSessions.js b/src/pages/session/AllSessions.js new file mode 100644 index 0000000..27e261e --- /dev/null +++ b/src/pages/session/AllSessions.js @@ -0,0 +1,3 @@ +export default function AllSessions() { + return

All Sessions

; +} diff --git a/src/pages/session/SingleSession.js b/src/pages/session/SingleSession.js new file mode 100644 index 0000000..37cc230 --- /dev/null +++ b/src/pages/session/SingleSession.js @@ -0,0 +1,3 @@ +export default function SingleSession() { + return

Single Session

; +} diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 8f2609b..0000000 --- a/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/src/shared/ui/Layout/Layout.js b/src/shared/ui/Layout/Layout.js deleted file mode 100644 index 436eaa4..0000000 --- a/src/shared/ui/Layout/Layout.js +++ /dev/null @@ -1,3 +0,0 @@ -export function Layout() { - return
hi layout
; -} diff --git a/src/shared/ui/Layout/Layout.module.css b/src/shared/ui/Layout/Layout.module.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/shared/ui/index.js b/src/shared/ui/index.js deleted file mode 100644 index 705a4bb..0000000 --- a/src/shared/ui/index.js +++ /dev/null @@ -1 +0,0 @@ -export { Layout } from "./Layout/Layout";