From 8292a2622d6889f74b6936cc3f8e2cd2979f2d0d Mon Sep 17 00:00:00 2001 From: RailTH Date: Thu, 8 Feb 2024 16:37:07 +1100 Subject: [PATCH] Profile page, file structure & fixes Fixed warning about Babel, added folder 'utils', coding profile page & other --- reactapp/package-lock.json | 28 +++- reactapp/package.json | 3 + reactapp/src/App.tsx | 8 +- reactapp/src/ProfileStyle.scss | 132 +++++++++++++++++++ reactapp/src/assets/img/profile-avatar.png | Bin 0 -> 24229 bytes reactapp/src/components/ProductCard.tsx | 11 +- reactapp/src/components/ProfileInfo.tsx | 12 ++ reactapp/src/components/ProfileOrders.tsx | 36 ++++- reactapp/src/components/ProfilePurchases.tsx | 25 +++- reactapp/src/index.scss | 14 +- reactapp/src/index.tsx | 2 +- reactapp/src/pages/HomePage.tsx | 2 +- reactapp/src/pages/ProfilePage.tsx | 8 +- reactapp/src/{ => utils}/custom.d.ts | 0 reactapp/src/{ => utils}/reset.css | 0 reactapp/tsconfig.json | 2 +- 16 files changed, 261 insertions(+), 22 deletions(-) create mode 100644 reactapp/src/assets/img/profile-avatar.png create mode 100644 reactapp/src/components/ProfileInfo.tsx rename reactapp/src/{ => utils}/custom.d.ts (100%) rename reactapp/src/{ => utils}/reset.css (100%) diff --git a/reactapp/package-lock.json b/reactapp/package-lock.json index f590360..6b5a09c 100644 --- a/reactapp/package-lock.json +++ b/reactapp/package-lock.json @@ -24,6 +24,9 @@ "scss": "^0.2.4", "typescript": "^5.3.3", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -652,9 +655,17 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, "engines": { "node": ">=6.9.0" }, @@ -1897,6 +1908,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", diff --git a/reactapp/package.json b/reactapp/package.json index 0596dde..56ac11b 100644 --- a/reactapp/package.json +++ b/reactapp/package.json @@ -43,5 +43,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11" } } diff --git a/reactapp/src/App.tsx b/reactapp/src/App.tsx index f1ac45f..eff2c8f 100644 --- a/reactapp/src/App.tsx +++ b/reactapp/src/App.tsx @@ -15,10 +15,10 @@ export default function App() {
}/> - }/> - }/> - }/> - }/> + }/> + }/> + }/> + }/>
diff --git a/reactapp/src/ProfileStyle.scss b/reactapp/src/ProfileStyle.scss index 82f38c1..d1f7371 100644 --- a/reactapp/src/ProfileStyle.scss +++ b/reactapp/src/ProfileStyle.scss @@ -8,4 +8,136 @@ $accent-color: #EB5E28; display: flex; flex-direction: column; align-items: center; + gap: 20px; + + .profile-section__nav { + width: 100%; + display: flex; + justify-content: space-between; + + .profile-link { + color: white; + font-size: 32px; + font-weight: 600; + line-height: 39px; + letter-spacing: 0%; + text-align: left; + } + + .active { + color: $accent-color; + } + } + + .profile-section__info-div { + display: flex; + max-width: 150px; + flex-direction: column; + + span { + color: white; + font-size: 24px; + font-weight: 600; + line-height: 29px; + letter-spacing: 0%; + text-align: left; + } + } + + .orders-section { + width: 100%; + min-height: 100%; + display: flex; + flex-direction: column; + gap: 20px; + + .orders-container { + width: 100%; + display: flex; + gap: 80px; + + .orders-div { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + gap: 40px; + + .order-article { + width: 352px; + height: 120px; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 0px 14px 0px 14px; + border-radius: 15px; + box-shadow: -4px -4px 10px 0px rgba(0, 0, 0, 0.25),4px 4px 10px 0px rgba(0, 0, 0, 0.25); + background: $background-color; + + .order-article__img { + min-width: 90px; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + height: 90px; + border-radius: 8px; + background-image: url(../src/assets/img/product-image-1.webp); + } + + .order-article__info-div { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + + .order-article__status-span { + color: white; + font-size: 24px; + font-weight: 600; + line-height: 29px; + letter-spacing: 0%; + text-align: left; + } + + .order-article__info-span { + color: #808080; + font-size: 16px; + font-weight: 500; + line-height: 20px; + letter-spacing: 0%; + text-align: left; + } + + .order-article__date-span { + color: white; + font-size: 16px; + font-weight: 500; + line-height: 20px; + letter-spacing: 0%; + text-align: left; + } + } + } + } + } + } + + .purchases-section { + width: 100%; + min-height: 100%; + display: flex; + flex-direction: column; + gap: 20px; + + .purchases-container { + width: 100%; + display: flex; + gap: 80px; + + .purchases-div { + display: flex; + } + } + } } \ No newline at end of file diff --git a/reactapp/src/assets/img/profile-avatar.png b/reactapp/src/assets/img/profile-avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..ac55c7a7287eb88b8966cf6eb5bc49c20454d697 GIT binary patch literal 24229 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 M07*qoM6N<$g3#)z*8l(j literal 0 HcmV?d00001 diff --git a/reactapp/src/components/ProductCard.tsx b/reactapp/src/components/ProductCard.tsx index 9c3320d..e39d49f 100644 --- a/reactapp/src/components/ProductCard.tsx +++ b/reactapp/src/components/ProductCard.tsx @@ -7,11 +7,18 @@ type ProductTypes = { } export default function ProductCard({ProductName, ProductImg, Price}:ProductTypes) { + const PriceAsString = Price.toString(); + return(
-
{Price} ₽
-
{ProductName}
+
+ {PriceAsString} + +
+
+ {ProductName} +
) } \ No newline at end of file diff --git a/reactapp/src/components/ProfileInfo.tsx b/reactapp/src/components/ProfileInfo.tsx new file mode 100644 index 0000000..87b1555 --- /dev/null +++ b/reactapp/src/components/ProfileInfo.tsx @@ -0,0 +1,12 @@ +import React from "react"; +import ProfileAvatar from '../assets/img/profile-avatar.png'; +import '../ProfileStyle.scss'; + +export default function ProfileInfo() { + return( +
+ + Роман Константинов +
+ ) +} \ No newline at end of file diff --git a/reactapp/src/components/ProfileOrders.tsx b/reactapp/src/components/ProfileOrders.tsx index 73928f4..16dd6bb 100644 --- a/reactapp/src/components/ProfileOrders.tsx +++ b/reactapp/src/components/ProfileOrders.tsx @@ -1,8 +1,40 @@ import React from "react"; +import { Link } from "react-router-dom"; +import '../ProfileStyle.scss'; +import ProfileInfo from "./ProfileInfo"; export default function ProfileOrders() { return( - <> - +
+ +
+ +
+
+
+
+ В пути + Доставка в пункт выдачи + Ожидаем 9 декабря +
+
+
+
+
+ В пути + Доставка в пункт выдачи + Ожидаем 9 декабря +
+
+
+
+
) } \ No newline at end of file diff --git a/reactapp/src/components/ProfilePurchases.tsx b/reactapp/src/components/ProfilePurchases.tsx index ce31a98..bb59210 100644 --- a/reactapp/src/components/ProfilePurchases.tsx +++ b/reactapp/src/components/ProfilePurchases.tsx @@ -1,8 +1,29 @@ import React from "react"; +import { Link } from "react-router-dom"; +import '../ProfileStyle.scss'; +import ProfileInfo from "./ProfileInfo"; +import ProductCard from "./ProductCard"; +import ProductImage from "../assets/img/product-image-3.webp"; export default function ProfilePurchases() { return( - <> - +
+ +
+ +
+ + + +
+
+
) } \ No newline at end of file diff --git a/reactapp/src/index.scss b/reactapp/src/index.scss index d6dc515..a111bd0 100644 --- a/reactapp/src/index.scss +++ b/reactapp/src/index.scss @@ -1,7 +1,7 @@ $background-color: #252422; $main-color: #CCC5B9; $accent-color: #EB5E28; -@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600&display=swap'); body { background-color: $background-color; @@ -30,8 +30,18 @@ body { font-size: 32px; font-weight: 600; line-height: 39px; - letter-spacing: 0%; + height: 50px; text-align: left; + display: inline-block; + + span { + max-width: 186px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + } + } .product-article__name-h6 { diff --git a/reactapp/src/index.tsx b/reactapp/src/index.tsx index b742b4d..bc6f0dc 100644 --- a/reactapp/src/index.tsx +++ b/reactapp/src/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import { BrowserRouter } from 'react-router-dom'; import './index.scss'; -import './reset.css'; +import './utils/reset.css'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); diff --git a/reactapp/src/pages/HomePage.tsx b/reactapp/src/pages/HomePage.tsx index 54c8950..bbe991c 100644 --- a/reactapp/src/pages/HomePage.tsx +++ b/reactapp/src/pages/HomePage.tsx @@ -24,7 +24,7 @@ export default function HomePage() { - + diff --git a/reactapp/src/pages/ProfilePage.tsx b/reactapp/src/pages/ProfilePage.tsx index dbb8eeb..9018076 100644 --- a/reactapp/src/pages/ProfilePage.tsx +++ b/reactapp/src/pages/ProfilePage.tsx @@ -1,17 +1,17 @@ import React from "react"; import Banner from "../components/AddBanner"; +import '../ProfileStyle.scss'; +import { Route, Routes } from "react-router-dom"; import ProfileOrders from "../components/ProfileOrders"; import ProfilePurchases from "../components/ProfilePurchases"; -import '../ProfileStyle.scss'; -import { Routes, Route, Link } from 'react-router-dom'; export default function ProfilePage() { return(
- } /> - } /> + }/> + }/>
) diff --git a/reactapp/src/custom.d.ts b/reactapp/src/utils/custom.d.ts similarity index 100% rename from reactapp/src/custom.d.ts rename to reactapp/src/utils/custom.d.ts diff --git a/reactapp/src/reset.css b/reactapp/src/utils/reset.css similarity index 100% rename from reactapp/src/reset.css rename to reactapp/src/utils/reset.css diff --git a/reactapp/tsconfig.json b/reactapp/tsconfig.json index ed3b361..6117b0e 100644 --- a/reactapp/tsconfig.json +++ b/reactapp/tsconfig.json @@ -20,6 +20,6 @@ "include": [ "src", "src/components", - "src/custom.d.ts" + "src/utils/custom.d.ts" ] }