mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 07:21:31 +00:00
refactor: add basic table display
This commit is contained in:
parent
0efaac4748
commit
bc7f5deea8
169
react-typescript/package-lock.json
generated
169
react-typescript/package-lock.json
generated
@ -15,14 +15,17 @@
|
|||||||
"@types/node": "^16.11.38",
|
"@types/node": "^16.11.38",
|
||||||
"@types/react": "^18.0.10",
|
"@types/react": "^18.0.10",
|
||||||
"@types/react-dom": "^18.0.5",
|
"@types/react-dom": "^18.0.5",
|
||||||
|
"framer-motion": "^6.3.10",
|
||||||
"react": "^18.1.0",
|
"react": "^18.1.0",
|
||||||
"react-dom": "^18.1.0",
|
"react-dom": "^18.1.0",
|
||||||
"react-scripts": "5.0.1",
|
"react-scripts": "5.0.1",
|
||||||
|
"react-table": "^7.8.0",
|
||||||
"styled-components": "^5.3.5",
|
"styled-components": "^5.3.5",
|
||||||
"typescript": "^4.7.2",
|
"typescript": "^4.7.2",
|
||||||
"web-vitals": "^2.1.4"
|
"web-vitals": "^2.1.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/react-table": "^7.7.12",
|
||||||
"@types/styled-components": "^5.1.25"
|
"@types/styled-components": "^5.1.25"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3808,6 +3811,15 @@
|
|||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/react-table": {
|
||||||
|
"version": "7.7.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-7.7.12.tgz",
|
||||||
|
"integrity": "sha512-bRUent+NR/WwtDGwI/BqhZ8XnHghwHw0HUKeohzB5xN3K2qKWYE5w19e7GCuOkL1CXD9Gi1HFy7TIm2AvgWUHg==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@types/react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/resolve": {
|
"node_modules/@types/resolve": {
|
||||||
"version": "1.17.1",
|
"version": "1.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
||||||
@ -7926,6 +7938,48 @@
|
|||||||
"url": "https://www.patreon.com/infusion"
|
"url": "https://www.patreon.com/infusion"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/framer-motion": {
|
||||||
|
"version": "6.3.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.3.10.tgz",
|
||||||
|
"integrity": "sha512-modFplFb1Fznsm0MrmRAJUC32UDA5jbGU9rDvkGzhAHksru2tnoKbU/Pa3orzdsJI0CJviG4NGBrmwGveU98Cg==",
|
||||||
|
"dependencies": {
|
||||||
|
"framesync": "6.0.1",
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"popmotion": "11.0.3",
|
||||||
|
"style-value-types": "5.0.0",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@emotion/is-prop-valid": "^0.8.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8 || ^17.0.0 || ^18.0.0",
|
||||||
|
"react-dom": ">=16.8 || ^17.0.0 || ^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/framer-motion/node_modules/@emotion/is-prop-valid": {
|
||||||
|
"version": "0.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
|
||||||
|
"integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@emotion/memoize": "0.7.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/framer-motion/node_modules/@emotion/memoize": {
|
||||||
|
"version": "0.7.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
|
||||||
|
"integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"node_modules/framesync": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/fresh": {
|
"node_modules/fresh": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
@ -8270,6 +8324,11 @@
|
|||||||
"he": "bin/he"
|
"he": "bin/he"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/hey-listen": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
|
||||||
|
},
|
||||||
"node_modules/hoist-non-react-statics": {
|
"node_modules/hoist-non-react-statics": {
|
||||||
"version": "3.3.2",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
||||||
@ -12197,6 +12256,17 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/popmotion": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==",
|
||||||
|
"dependencies": {
|
||||||
|
"framesync": "6.0.1",
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"style-value-types": "5.0.0",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.14",
|
"version": "8.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
||||||
@ -13764,6 +13834,18 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-table": {
|
||||||
|
"version": "7.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz",
|
||||||
|
"integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==",
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/tannerlinsley"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "^16.8.3 || ^17.0.0-0 || ^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/readable-stream": {
|
"node_modules/readable-stream": {
|
||||||
"version": "3.6.0",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
@ -14849,6 +14931,15 @@
|
|||||||
"webpack": "^5.0.0"
|
"webpack": "^5.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/style-value-types": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==",
|
||||||
|
"dependencies": {
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/styled-components": {
|
"node_modules/styled-components": {
|
||||||
"version": "5.3.5",
|
"version": "5.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz",
|
||||||
@ -19109,6 +19200,15 @@
|
|||||||
"@types/react": "*"
|
"@types/react": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/react-table": {
|
||||||
|
"version": "7.7.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react-table/-/react-table-7.7.12.tgz",
|
||||||
|
"integrity": "sha512-bRUent+NR/WwtDGwI/BqhZ8XnHghwHw0HUKeohzB5xN3K2qKWYE5w19e7GCuOkL1CXD9Gi1HFy7TIm2AvgWUHg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/resolve": {
|
"@types/resolve": {
|
||||||
"version": "1.17.1",
|
"version": "1.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
||||||
@ -22125,6 +22225,44 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
|
||||||
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
|
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA=="
|
||||||
},
|
},
|
||||||
|
"framer-motion": {
|
||||||
|
"version": "6.3.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-6.3.10.tgz",
|
||||||
|
"integrity": "sha512-modFplFb1Fznsm0MrmRAJUC32UDA5jbGU9rDvkGzhAHksru2tnoKbU/Pa3orzdsJI0CJviG4NGBrmwGveU98Cg==",
|
||||||
|
"requires": {
|
||||||
|
"@emotion/is-prop-valid": "^0.8.2",
|
||||||
|
"framesync": "6.0.1",
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"popmotion": "11.0.3",
|
||||||
|
"style-value-types": "5.0.0",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@emotion/is-prop-valid": {
|
||||||
|
"version": "0.8.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
|
||||||
|
"integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
|
||||||
|
"optional": true,
|
||||||
|
"requires": {
|
||||||
|
"@emotion/memoize": "0.7.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@emotion/memoize": {
|
||||||
|
"version": "0.7.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
|
||||||
|
"integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"framesync": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/framesync/-/framesync-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==",
|
||||||
|
"requires": {
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fresh": {
|
"fresh": {
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
@ -22365,6 +22503,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
|
||||||
},
|
},
|
||||||
|
"hey-listen": {
|
||||||
|
"version": "1.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
|
||||||
|
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="
|
||||||
|
},
|
||||||
"hoist-non-react-statics": {
|
"hoist-non-react-statics": {
|
||||||
"version": "3.3.2",
|
"version": "3.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
||||||
@ -25209,6 +25352,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"popmotion": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/popmotion/-/popmotion-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==",
|
||||||
|
"requires": {
|
||||||
|
"framesync": "6.0.1",
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"style-value-types": "5.0.0",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.4.14",
|
"version": "8.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
||||||
@ -26203,6 +26357,12 @@
|
|||||||
"workbox-webpack-plugin": "^6.4.1"
|
"workbox-webpack-plugin": "^6.4.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-table": {
|
||||||
|
"version": "7.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-table/-/react-table-7.8.0.tgz",
|
||||||
|
"integrity": "sha512-hNaz4ygkZO4bESeFfnfOft73iBUj8K5oKi1EcSHPAibEydfsX2MyU6Z8KCr3mv3C9Kqqh71U+DhZkFvibbnPbA==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
"readable-stream": {
|
"readable-stream": {
|
||||||
"version": "3.6.0",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
|
||||||
@ -27006,6 +27166,15 @@
|
|||||||
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==",
|
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==",
|
||||||
"requires": {}
|
"requires": {}
|
||||||
},
|
},
|
||||||
|
"style-value-types": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/style-value-types/-/style-value-types-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==",
|
||||||
|
"requires": {
|
||||||
|
"hey-listen": "^1.0.8",
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"styled-components": {
|
"styled-components": {
|
||||||
"version": "5.3.5",
|
"version": "5.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz",
|
||||||
|
|||||||
@ -10,9 +10,11 @@
|
|||||||
"@types/node": "^16.11.38",
|
"@types/node": "^16.11.38",
|
||||||
"@types/react": "^18.0.10",
|
"@types/react": "^18.0.10",
|
||||||
"@types/react-dom": "^18.0.5",
|
"@types/react-dom": "^18.0.5",
|
||||||
|
"framer-motion": "^6.3.10",
|
||||||
"react": "^18.1.0",
|
"react": "^18.1.0",
|
||||||
"react-dom": "^18.1.0",
|
"react-dom": "^18.1.0",
|
||||||
"react-scripts": "5.0.1",
|
"react-scripts": "5.0.1",
|
||||||
|
"react-table": "^7.8.0",
|
||||||
"styled-components": "^5.3.5",
|
"styled-components": "^5.3.5",
|
||||||
"typescript": "^4.7.2",
|
"typescript": "^4.7.2",
|
||||||
"web-vitals": "^2.1.4"
|
"web-vitals": "^2.1.4"
|
||||||
@ -42,6 +44,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/react-table": "^7.7.12",
|
||||||
"@types/styled-components": "^5.1.25"
|
"@types/styled-components": "^5.1.25"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { render, screen } from '@testing-library/react';
|
|
||||||
import App from './components/App';
|
|
||||||
|
|
||||||
test('renders learn react link', () => {
|
|
||||||
render(<App />);
|
|
||||||
const linkElement = screen.getByText(/learn react/i);
|
|
||||||
expect(linkElement).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
@ -1,5 +1,6 @@
|
|||||||
.App {
|
.App {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
height: 50vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
.App-logo {
|
||||||
|
|||||||
@ -1,14 +1,34 @@
|
|||||||
import useDayLoader from '../hooks/useDayLoader';
|
import { createGlobalStyle } from 'styled-components';
|
||||||
import './App.css';
|
import ItemsSection from './ItemsSection';
|
||||||
import Items from './Items';
|
|
||||||
|
|
||||||
function App() {
|
function App(): JSX.Element {
|
||||||
const { loadNextDay } = useDayLoader();
|
|
||||||
|
const GlobalStyle = createGlobalStyle`
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
html, body {
|
||||||
|
background-color: RGB(132, 151, 149);
|
||||||
|
color: RGB(227, 226, 215);
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
|
||||||
|
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
||||||
|
sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
`
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<section>
|
||||||
<Items />
|
<GlobalStyle />
|
||||||
<button onClick={() => loadNextDay()}></button>
|
{/* <Header /> */}
|
||||||
</div>
|
<ItemsSection />
|
||||||
|
</section>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
react-typescript/src/components/Button.tsx
Normal file
19
react-typescript/src/components/Button.tsx
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
import useDayLoader from '../hooks/useDayLoader';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
//TODO: define styled components here
|
||||||
|
|
||||||
|
function Button() {
|
||||||
|
const Button = styled(motion.button)`
|
||||||
|
border: none;
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
const { loadNextDay } = useDayLoader();
|
||||||
|
return (
|
||||||
|
<Button onClick={loadNextDay}>Next Day</Button>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Button;
|
||||||
@ -1,21 +0,0 @@
|
|||||||
import useAllItems from "../hooks/useAllItems";
|
|
||||||
import { TItem } from "../types"
|
|
||||||
|
|
||||||
function Items() {
|
|
||||||
const { items } = useAllItems();
|
|
||||||
return (
|
|
||||||
<div className="Item">
|
|
||||||
<ul>
|
|
||||||
{items.map((item: TItem) => {
|
|
||||||
return (
|
|
||||||
<li key={item.name}>
|
|
||||||
Name: {item.name} Quality: {item.quality} SellIn: {item.sellIn}
|
|
||||||
</li>
|
|
||||||
);
|
|
||||||
})}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Items;
|
|
||||||
69
react-typescript/src/components/ItemsSection.tsx
Normal file
69
react-typescript/src/components/ItemsSection.tsx
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import { useMemo } from "react";
|
||||||
|
import styled from "styled-components";
|
||||||
|
import useAllItems from "../hooks/useAllItems";
|
||||||
|
import ItemsTable from './ItemsTable';
|
||||||
|
import Button from './Button';
|
||||||
|
|
||||||
|
function ItemsSection(): JSX.Element {
|
||||||
|
const ItemsSection = styled.section`
|
||||||
|
height: 85vh;
|
||||||
|
ul {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
color: white;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
display: inline-block;
|
||||||
|
height: 10%;
|
||||||
|
width: 40%;
|
||||||
|
border: 1px solid white;
|
||||||
|
margin: 3% 3%;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
const { items } = useAllItems();
|
||||||
|
const data = useMemo(() => items, [items]);
|
||||||
|
const columns = useMemo(() => [
|
||||||
|
{
|
||||||
|
Header: "Details",
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
Header: 'Name',
|
||||||
|
accessor: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Header: 'Conjured',
|
||||||
|
accessor: 'isConjured'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Header: "Item Info",
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
Header: 'Quality',
|
||||||
|
accessor: 'quality'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Header: 'Days Left',
|
||||||
|
accessor: 'sellIn'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
}
|
||||||
|
], []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ItemsSection>
|
||||||
|
<ItemsTable columns={columns} data={data}/>
|
||||||
|
<Button />
|
||||||
|
</ItemsSection>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ItemsSection;
|
||||||
131
react-typescript/src/components/ItemsTable.tsx
Normal file
131
react-typescript/src/components/ItemsTable.tsx
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import { useTable } from "react-table";
|
||||||
|
import styled from "styled-components";
|
||||||
|
import { TTable } from "../types";
|
||||||
|
|
||||||
|
function ItemTable({ columns, data }: TTable): JSX.Element {
|
||||||
|
const ItemsSection = styled.section`
|
||||||
|
height: 85vh;
|
||||||
|
ul {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
color: white;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
display: inline-block;
|
||||||
|
height: 10%;
|
||||||
|
width: 40%;
|
||||||
|
border: 1px solid white;
|
||||||
|
margin: 3% 3%;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
const {
|
||||||
|
getTableProps,
|
||||||
|
getTableBodyProps,
|
||||||
|
headerGroups,
|
||||||
|
rows,
|
||||||
|
prepareRow,
|
||||||
|
} = useTable({
|
||||||
|
columns,
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
|
||||||
|
<table {...getTableProps()} style={{ border: 'solid 1px blue' }}>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
|
||||||
|
{headerGroups.map(headerGroup => (
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
{headerGroup.headers.map(column => (
|
||||||
|
|
||||||
|
<th
|
||||||
|
|
||||||
|
{...column.getHeaderProps()}
|
||||||
|
|
||||||
|
style={{
|
||||||
|
|
||||||
|
borderBottom: 'solid 3px red',
|
||||||
|
|
||||||
|
background: 'aliceblue',
|
||||||
|
|
||||||
|
color: 'black',
|
||||||
|
|
||||||
|
fontWeight: 'bold',
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
>
|
||||||
|
|
||||||
|
{column.render('Header')}
|
||||||
|
|
||||||
|
</th>
|
||||||
|
|
||||||
|
))}
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
))}
|
||||||
|
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody {...getTableBodyProps()}>
|
||||||
|
|
||||||
|
{rows.map(row => {
|
||||||
|
|
||||||
|
prepareRow(row)
|
||||||
|
|
||||||
|
return (
|
||||||
|
|
||||||
|
<tr {...row.getRowProps()}>
|
||||||
|
|
||||||
|
{row.cells.map(cell => {
|
||||||
|
|
||||||
|
return (
|
||||||
|
|
||||||
|
<td
|
||||||
|
|
||||||
|
{...cell.getCellProps()}
|
||||||
|
|
||||||
|
style={{
|
||||||
|
|
||||||
|
padding: '10px',
|
||||||
|
|
||||||
|
border: 'solid 1px gray',
|
||||||
|
|
||||||
|
background: 'papayawhip',
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
>
|
||||||
|
|
||||||
|
{cell.render('Cell')}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
})}
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
})}
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ItemTable;
|
||||||
@ -2,10 +2,7 @@ import { useReducer } from "react";
|
|||||||
import initialState from "../model/initialState";
|
import initialState from "../model/initialState";
|
||||||
import reducer from "../model/reducer";
|
import reducer from "../model/reducer";
|
||||||
import StoreContext from "../model/storeContext";
|
import StoreContext from "../model/storeContext";
|
||||||
|
import { TProps } from "../types";
|
||||||
type TProps = {
|
|
||||||
children: JSX.Element;
|
|
||||||
}
|
|
||||||
|
|
||||||
function StoreProvider({ children }: TProps): JSX.Element {
|
function StoreProvider({ children }: TProps): JSX.Element {
|
||||||
const [state, dispatch] = useReducer(reducer, initialState);
|
const [state, dispatch] = useReducer(reducer, initialState);
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
import styled from 'styled-components';
|
||||||
|
|
||||||
|
const ButtonSectionStyle = styled.section`
|
||||||
|
width: 100%;
|
||||||
|
height: 20%;
|
||||||
|
`
|
||||||
|
|
||||||
|
export default ButtonSectionStyle;
|
||||||
8
react-typescript/src/components/style/ButtonStyle.ts
Normal file
8
react-typescript/src/components/style/ButtonStyle.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { css } from 'styled-components';
|
||||||
|
|
||||||
|
const ButtonStyle = css`
|
||||||
|
width: 1%;
|
||||||
|
height: 2%;
|
||||||
|
`
|
||||||
|
|
||||||
|
export default ButtonStyle;
|
||||||
24
react-typescript/src/components/style/GlobalStyle.ts
Normal file
24
react-typescript/src/components/style/GlobalStyle.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { createGlobalStyle } from "styled-components";
|
||||||
|
|
||||||
|
const GlobalStyle = createGlobalStyle`
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
html, body {
|
||||||
|
background-color: RGB(132, 151, 149);
|
||||||
|
color: RGB(227, 226, 215);
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
|
||||||
|
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
||||||
|
sans-serif;
|
||||||
|
text-align: center;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
`
|
||||||
|
|
||||||
|
export default GlobalStyle;
|
||||||
26
react-typescript/src/components/style/ItemsStyle.ts
Normal file
26
react-typescript/src/components/style/ItemsStyle.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import styled from "styled-components";
|
||||||
|
|
||||||
|
const ItemsStyle = styled.div`
|
||||||
|
height: 85vh;
|
||||||
|
ul {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
color: white;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
display: inline-block;
|
||||||
|
height: 10%;
|
||||||
|
width: 40%;
|
||||||
|
border: 1px solid white;
|
||||||
|
margin: 3% 3%;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export default ItemsStyle;
|
||||||
|
|
||||||
13
react-typescript/src/components/style/index.ts
Normal file
13
react-typescript/src/components/style/index.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import ButtonSectionStyle from './ButtonSectionStyle';
|
||||||
|
import ButtonStyle from './ButtonStyle';
|
||||||
|
import GlobalStyle from './GlobalStyle';
|
||||||
|
import ItemsStyle from './ItemsStyle';
|
||||||
|
|
||||||
|
const styles = {
|
||||||
|
ButtonSectionStyle,
|
||||||
|
ButtonStyle,
|
||||||
|
GlobalStyle,
|
||||||
|
ItemsStyle
|
||||||
|
}
|
||||||
|
|
||||||
|
export default styles;
|
||||||
@ -1,7 +0,0 @@
|
|||||||
import styled from 'styled-components';
|
|
||||||
|
|
||||||
const Button = styled.button`
|
|
||||||
|
|
||||||
`
|
|
||||||
|
|
||||||
export default Button;
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
body {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
height: 100vh;
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
|
||||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
|
||||||
sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
|
||||||
monospace;
|
|
||||||
}
|
|
||||||
@ -1,6 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from 'react-dom/client';
|
||||||
import './index.css';
|
|
||||||
import App from './components/App';
|
import App from './components/App';
|
||||||
import StoreProvider from './components/StoreProvider';
|
import StoreProvider from './components/StoreProvider';
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
const initialState = {
|
import { TState } from "../types";
|
||||||
|
|
||||||
|
const initialState: TState = {
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
name: '+5 Dexterity Vest',
|
name: '+5 Dexterity Vest',
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import { Column } from "react-table";
|
||||||
|
|
||||||
type TItem = {
|
type TItem = {
|
||||||
name: string,
|
name: string,
|
||||||
sellIn: number,
|
sellIn: number,
|
||||||
@ -5,6 +7,15 @@ type TItem = {
|
|||||||
isConjured: boolean
|
isConjured: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TProps = {
|
||||||
|
children: JSX.Element;
|
||||||
|
}
|
||||||
|
|
||||||
|
type TTable = {
|
||||||
|
columns: Column[],
|
||||||
|
data: TItem[]
|
||||||
|
}
|
||||||
|
|
||||||
type TState = {
|
type TState = {
|
||||||
items: TItem[]
|
items: TItem[]
|
||||||
};
|
};
|
||||||
@ -27,5 +38,7 @@ export type {
|
|||||||
TItem,
|
TItem,
|
||||||
TState,
|
TState,
|
||||||
TAction,
|
TAction,
|
||||||
TContext
|
TContext,
|
||||||
|
TProps,
|
||||||
|
TTable
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user