From 9cb693fb9c4bafe8dd1c096332d39480cf0c77fe Mon Sep 17 00:00:00 2001 From: Graphictoria Date: Wed, 27 Jul 2022 23:38:16 -0400 Subject: [PATCH] even more shop stuff, we're almost there! --- web/package-lock.json | 221 ++++++++++++++++-- web/package.json | 1 + web/resources/js/components/Comments.js | 31 +++ web/resources/js/components/Feed.js | 2 +- web/resources/js/components/Loader.js | 2 +- web/resources/js/components/Main.js | 2 +- web/resources/js/components/PurchaseButton.js | 195 ++++++++++++++++ web/resources/js/components/SearchBar.js | 2 +- web/resources/js/components/Shop.js | 2 +- web/resources/js/pages/Dashboard.js | 2 +- web/resources/js/pages/Item.js | 22 ++ web/resources/js/pages/Maintenance.js | 2 +- web/resources/js/pages/Shop.js | 2 +- web/resources/js/util/HTTP.js | 2 +- web/resources/views/web/shop/asset.blade.php | 34 +-- web/webpack.mix.js | 1 + 16 files changed, 475 insertions(+), 48 deletions(-) create mode 100644 web/resources/js/components/Comments.js create mode 100644 web/resources/js/components/PurchaseButton.js create mode 100644 web/resources/js/pages/Item.js diff --git a/web/package-lock.json b/web/package-lock.json index c594000..ac97591 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "dependencies": { + "@restart/ui": "^1.3.1", "classnames": "^2.3.1", "install": "^0.13.0", "laravel-mix-banner": "^0.1.4", @@ -1553,9 +1554,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -1741,13 +1742,22 @@ "version": "2.11.5", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", - "dev": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, + "node_modules/@react-aria/ssr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.2.0.tgz", + "integrity": "sha512-wwJFdkl+Q8NU5yJ4NvdAOqx5LM3QtUVoSjuK7Ey8jZ4WS4bB0EqT3Kr3IInBs257HzZ5nXCiKXKE4NGXXuIRWA==", + "dependencies": { + "@babel/runtime": "^7.6.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" + } + }, "node_modules/@react-spring/animated": { "version": "9.4.5", "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.4.5.tgz", @@ -1902,6 +1912,37 @@ } } }, + "node_modules/@restart/hooks": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz", + "integrity": "sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==", + "dependencies": { + "dequal": "^2.0.2" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@restart/ui": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.3.1.tgz", + "integrity": "sha512-MYvMs2eeZTHu2dBJHOXKx72vxzEZeWbZx2z1QjeXq62iYjpjIyukBC2ZEy8x+sb9Gl0AiOiHkPXrl1wn95aOGQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@popperjs/core": "^2.11.5", + "@react-aria/ssr": "^3.2.0", + "@restart/hooks": "^0.4.7", + "@types/warning": "^3.0.0", + "dequal": "^2.0.2", + "dom-helpers": "^5.2.0", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": ">=16.14.0", + "react-dom": ">=16.14.0" + } + }, "node_modules/@tailwindcss/forms": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", @@ -2142,8 +2183,7 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -2159,7 +2199,6 @@ "version": "18.0.9", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", - "dev": true, "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2183,8 +2222,7 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -2216,6 +2254,11 @@ "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==" }, + "node_modules/@types/warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", + "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -3805,8 +3848,7 @@ "node_modules/csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "node_modules/debounce": { "version": "1.2.1", @@ -3878,6 +3920,14 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -3981,6 +4031,15 @@ "node": ">=6" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -5265,6 +5324,14 @@ "node": ">= 0.10" } }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", @@ -9647,6 +9714,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "node_modules/react-merge-refs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", @@ -11016,6 +11088,20 @@ "node": ">= 0.6" } }, + "node_modules/uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "dependencies": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -11187,6 +11273,14 @@ "node": ">=4.0.0" } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", @@ -12859,9 +12953,9 @@ } }, "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -13010,9 +13104,15 @@ "@popperjs/core": { "version": "2.11.5", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz", - "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==", - "dev": true, - "peer": true + "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==" + }, + "@react-aria/ssr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.2.0.tgz", + "integrity": "sha512-wwJFdkl+Q8NU5yJ4NvdAOqx5LM3QtUVoSjuK7Ey8jZ4WS4bB0EqT3Kr3IInBs257HzZ5nXCiKXKE4NGXXuIRWA==", + "requires": { + "@babel/runtime": "^7.6.2" + } }, "@react-spring/animated": { "version": "9.4.5", @@ -13113,6 +13213,30 @@ "zustand": "^3.7.1" } }, + "@restart/hooks": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz", + "integrity": "sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A==", + "requires": { + "dequal": "^2.0.2" + } + }, + "@restart/ui": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.3.1.tgz", + "integrity": "sha512-MYvMs2eeZTHu2dBJHOXKx72vxzEZeWbZx2z1QjeXq62iYjpjIyukBC2ZEy8x+sb9Gl0AiOiHkPXrl1wn95aOGQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@popperjs/core": "^2.11.5", + "@react-aria/ssr": "^3.2.0", + "@restart/hooks": "^0.4.7", + "@types/warning": "^3.0.0", + "dequal": "^2.0.2", + "dom-helpers": "^5.2.0", + "uncontrollable": "^7.2.1", + "warning": "^4.0.3" + } + }, "@tailwindcss/forms": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", @@ -13346,8 +13470,7 @@ "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qs": { "version": "6.9.7", @@ -13363,7 +13486,6 @@ "version": "18.0.9", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==", - "dev": true, "requires": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -13387,8 +13509,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/serve-index": { "version": "1.9.1", @@ -13420,6 +13541,11 @@ "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==" }, + "@types/warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", + "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -14673,8 +14799,7 @@ "csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", - "dev": true + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" }, "debounce": { "version": "1.2.1", @@ -14723,6 +14848,11 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -14812,6 +14942,15 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -15753,6 +15892,14 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", @@ -18748,6 +18895,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, "react-merge-refs": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", @@ -19789,6 +19941,17 @@ "mime-types": "~2.1.24" } }, + "uncontrollable": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "requires": { + "@babel/runtime": "^7.6.3", + "@types/react": ">=16.9.11", + "invariant": "^2.2.4", + "react-lifecycles-compat": "^3.0.4" + } + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -19929,6 +20092,14 @@ } } }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, "watchpack": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", diff --git a/web/package.json b/web/package.json index ffabef5..f15d77c 100644 --- a/web/package.json +++ b/web/package.json @@ -30,6 +30,7 @@ "tailwindcss": "^3.0.24" }, "dependencies": { + "@restart/ui": "^1.3.1", "classnames": "^2.3.1", "install": "^0.13.0", "laravel-mix-banner": "^0.1.4", diff --git a/web/resources/js/components/Comments.js b/web/resources/js/components/Comments.js new file mode 100644 index 0000000..779b320 --- /dev/null +++ b/web/resources/js/components/Comments.js @@ -0,0 +1,31 @@ +// © XlXi 2022 +// Graphictoria 5 + +import { Component } from 'react'; + +import Loader from './Loader'; + +class Comments extends Component { + constructor(props) { + super(props); + } + + render() { + return ( + <> +

Comments

+
+
+ + +
+
+
+ +
+ + ); + } +} + +export default Comments; \ No newline at end of file diff --git a/web/resources/js/components/Feed.js b/web/resources/js/components/Feed.js index 6e14e7e..934d548 100644 --- a/web/resources/js/components/Feed.js +++ b/web/resources/js/components/Feed.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import { Component, createRef } from 'react'; diff --git a/web/resources/js/components/Loader.js b/web/resources/js/components/Loader.js index 3118470..f967bf1 100644 --- a/web/resources/js/components/Loader.js +++ b/web/resources/js/components/Loader.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 const Loader = () => { diff --git a/web/resources/js/components/Main.js b/web/resources/js/components/Main.js index b8fb9d4..abfe356 100644 --- a/web/resources/js/components/Main.js +++ b/web/resources/js/components/Main.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import $ from 'jquery'; diff --git a/web/resources/js/components/PurchaseButton.js b/web/resources/js/components/PurchaseButton.js new file mode 100644 index 0000000..02e2e0c --- /dev/null +++ b/web/resources/js/components/PurchaseButton.js @@ -0,0 +1,195 @@ +// © XlXi 2022 +// Graphictoria 5 + +import { createRef, Component } from 'react'; +import ReactDOM from 'react-dom'; + +import * as Bootstrap from 'bootstrap'; +import classNames from 'classnames/bind'; + +const itemId = 'gt-item'; + +class PurchaseConfirmationModal extends Component { + constructor(props) { + super(props); + this.state = { + + }; + + this.ModalRef = createRef(); + this.Modal = null; + } + + componentDidMount() { + let itemElement = document.getElementById(itemId); + if(itemElement) { + this.setState({ + assetName: itemElement.getAttribute('data-asset-name'), + assetCreator: itemElement.getAttribute('data-asset-creator'), + assetType: itemElement.getAttribute('data-asset-type'), + assetPrice: parseInt(itemElement.getAttribute('data-asset-price')), + userTokens: parseInt(itemElement.getAttribute('data-user-currency')) + }); + } + + this.Modal = new Bootstrap.Modal(this.ModalRef.current); + this.Modal.show(); + + this.ModalRef.current.addEventListener('hidden.bs.modal', (event) => { + this.props.setModal(null); + }) + } + + componentWillUnmount() { + this.Modal.dispose(); + } + + render() { + return ( +
+
+
+
+
Purchase Item
+ +
+
+

Would you like to purchase the { this.state.assetType } "{ this.state.assetName }" from { this.state.assetCreator } for { this.state.assetPrice }?

+ { this.state.assetName } +
+
+
+ +   + +
+

You will have { Math.max(0, (this.state.userTokens - this.state.assetPrice)) } after this purchase.

+
+
+
+
+ ); + } +} + +class NotEnoughTokensModal extends Component { + constructor(props) { + super(props); + this.state = { + + }; + + this.ModalRef = createRef(); + this.Modal = null; + } + + componentDidMount() { + let itemElement = document.getElementById(itemId); + if(itemElement) { + this.setState({ + assetPrice: parseInt(itemElement.getAttribute('data-asset-price')), + userTokens: parseInt(itemElement.getAttribute('data-user-currency')) + }); + } + + this.Modal = new Bootstrap.Modal(this.ModalRef.current); + this.Modal.show(); + + this.ModalRef.current.addEventListener('hidden.bs.modal', (event) => { + this.props.setModal(null); + }) + } + + componentWillUnmount() { + this.Modal.dispose(); + } + + render() { + return ( +
+
+
+
+
Insufficient Funds
+ +
+
+

You need { this.state.assetPrice - this.state.userTokens } more to purchase this item.

+
+
+ +
+
+
+
+ ); + } +} + +class PurchaseButton extends Component { + constructor(props) { + super(props); + this.state = { + loaded: false, + showModal: false + }; + + this.visibleModal = null; + + this.showPrompt = this.showPrompt.bind(this); + this.setModal = this.setModal.bind(this); + } + + componentDidMount() { + let itemElement = document.getElementById(itemId); + if(itemElement) { + this.setState({ + assetOnSale: (itemElement.getAttribute('data-asset-on-sale') === '1'), + canAfford: (itemElement.getAttribute('data-can-afford') === '1') + }); + } + + this.setState({loaded: true}); + } + + showPrompt() { + if(this.state.canAfford) + this.setModal(); + else + this.setModal(); + } + + setModal(modal = null) { + this.visibleModal = modal; + + if(modal) { + this.setState({'showModal': true}); + } else { + this.setState({'showModal': false}); + } + } + + render() { + return ( + <> + + + { this.state.showModal ? this.visibleModal : null } + + ); + } +} + +export default PurchaseButton; \ No newline at end of file diff --git a/web/resources/js/components/SearchBar.js b/web/resources/js/components/SearchBar.js index de75c1b..2014be1 100644 --- a/web/resources/js/components/SearchBar.js +++ b/web/resources/js/components/SearchBar.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import { useState, useRef, useEffect } from 'react'; diff --git a/web/resources/js/components/Shop.js b/web/resources/js/components/Shop.js index 2168243..0e52038 100644 --- a/web/resources/js/components/Shop.js +++ b/web/resources/js/components/Shop.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import { Component, createRef } from 'react'; diff --git a/web/resources/js/pages/Dashboard.js b/web/resources/js/pages/Dashboard.js index 34d8749..0c93932 100644 --- a/web/resources/js/pages/Dashboard.js +++ b/web/resources/js/pages/Dashboard.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import $ from 'jquery'; diff --git a/web/resources/js/pages/Item.js b/web/resources/js/pages/Item.js new file mode 100644 index 0000000..2d89811 --- /dev/null +++ b/web/resources/js/pages/Item.js @@ -0,0 +1,22 @@ +// © XlXi 2022 +// Graphictoria 5 + +import $ from 'jquery'; + +import React from 'react'; +import { render } from 'react-dom'; + +import Comments from '../components/Comments'; +import PurchaseButton from '../components/PurchaseButton'; + +const purchaseId = 'gt-purchase-button'; +const commentsId = 'gt-comments'; + +$(document).ready(function() { + if (document.getElementById(commentsId)) { + render(, document.getElementById(commentsId)); + } + if (document.getElementById(purchaseId)) { + render(, document.getElementById(purchaseId)); + } +}); \ No newline at end of file diff --git a/web/resources/js/pages/Maintenance.js b/web/resources/js/pages/Maintenance.js index 8043504..049bcc7 100644 --- a/web/resources/js/pages/Maintenance.js +++ b/web/resources/js/pages/Maintenance.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import axios from 'axios'; diff --git a/web/resources/js/pages/Shop.js b/web/resources/js/pages/Shop.js index 0ed7a86..4b16968 100644 --- a/web/resources/js/pages/Shop.js +++ b/web/resources/js/pages/Shop.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 import $ from 'jquery'; diff --git a/web/resources/js/util/HTTP.js b/web/resources/js/util/HTTP.js index 525722a..7c9e89d 100644 --- a/web/resources/js/util/HTTP.js +++ b/web/resources/js/util/HTTP.js @@ -1,4 +1,4 @@ -// © XlXi 2021 +// © XlXi 2022 // Graphictoria 5 const urlObject = new URL(document.location.href); diff --git a/web/resources/views/web/shop/asset.blade.php b/web/resources/views/web/shop/asset.blade.php index b1c4208..fa080dc 100644 --- a/web/resources/views/web/shop/asset.blade.php +++ b/web/resources/views/web/shop/asset.blade.php @@ -3,12 +3,13 @@ @section('title', $title) @section('page-specific') + @endsection @section('content') {{-- XlXi: MOVE THESE TO JS --}} @if(false) -