From 1da7556aed8d5916f9a7dcbe7985ef743194589d Mon Sep 17 00:00:00 2001 From: gofnnp Date: Tue, 18 Apr 2023 15:05:02 +0400 Subject: [PATCH] =?UTF-8?q?dev=20#13995=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- angular/README.md | 2 +- angular/angular.json | 12 +- angular/package-lock.json | 363 ++++++++++++++---- angular/package.json | 7 +- angular/src/app/app-routing.module.ts | 17 +- angular/src/app/app.component.html | 1 + angular/src/app/app.component.spec.ts | 6 +- angular/src/app/app.component.ts | 2 +- angular/src/app/app.module.ts | 31 +- .../accordion/accordion.component.html | 7 + .../accordion/accordion.component.scss | 85 ++++ .../accordion/accordion.component.spec.ts | 23 ++ .../accordion/accordion.component.ts | 23 ++ .../app/components/exit/exit.component.scss | 2 +- .../footer-buttons.component.scss | 2 +- .../components/footer/footer.component.html | 4 + .../components/footer/footer.component.scss | 27 ++ .../footer/footer.component.spec.ts | 23 ++ .../app/components/footer/footer.component.ts | 15 + .../invite-friends.component.html | 15 + .../invite-friends.component.scss | 33 ++ .../invite-friends.component.spec.ts | 23 ++ .../invite-friends.component.ts | 15 + .../last-order/last-order.component.html | 11 + .../last-order/last-order.component.scss | 45 +++ .../last-order/last-order.component.spec.ts | 23 ++ .../last-order/last-order.component.ts | 15 + .../components/navbar/navbar.component.html | 4 +- .../components/navbar/navbar.component.scss | 39 +- .../app/components/navbar/navbar.component.ts | 5 +- .../social-media-buttons.component.html | 3 + .../social-media-buttons.component.scss | 15 + .../social-media-buttons.component.spec.ts | 23 ++ .../social-media-buttons.component.ts | 38 ++ .../src/app/guards/auth-guard.guard.spec.ts | 16 + angular/src/app/guards/auth-guard.guard.ts | 47 +++ .../app/pages/account/account.component.html | 6 +- .../app/pages/account/account.component.scss | 6 +- .../bonus-program.component.scss | 12 +- .../account/orders/orders.component.scss | 2 +- .../ref-system/ref-system.component.html | 4 +- .../ref-system/ref-system.component.scss | 4 +- .../ref-system/ref-system.component.ts | 2 +- .../guest-card/guest-card.component.html | 134 +++++++ .../guest-card/guest-card.component.scss | 191 +++++++++ .../guest-card/guest-card.component.spec.ts | 23 ++ .../pages/guest-card/guest-card.component.ts | 23 ++ .../src/app/pages/login/login.component.html | 26 ++ .../src/app/pages/login/login.component.scss | 137 +++++++ .../app/pages/login/login.component.spec.ts | 23 ++ .../src/app/pages/login/login.component.ts | 25 ++ .../src/app/pages/main/main.component.html | 4 +- .../pages/not-found/not-found.component.html | 2 +- .../pages/not-found/not-found.component.scss | 4 +- angular/src/assets/404.gif | Bin 0 -> 17602 bytes angular/src/assets/download-app.png | Bin 0 -> 67184 bytes angular/src/assets/download-app.svg | 11 + angular/src/assets/logo.svg | 8 +- .../assets/social-media-icons/instagram.svg | 5 + angular/src/assets/social-media-icons/vk.svg | 3 + .../src/assets/social-media-icons/youtube.svg | 11 + angular/src/environments/environment.prod.ts | 4 +- angular/src/environments/environment.ts | 2 +- angular/src/index.html | 7 +- angular/src/manifest.webmanifest | 4 +- angular/src/styles.scss | 33 +- 66 files changed, 1587 insertions(+), 151 deletions(-) create mode 100644 angular/src/app/components/accordion/accordion.component.html create mode 100644 angular/src/app/components/accordion/accordion.component.scss create mode 100644 angular/src/app/components/accordion/accordion.component.spec.ts create mode 100644 angular/src/app/components/accordion/accordion.component.ts create mode 100644 angular/src/app/components/footer/footer.component.html create mode 100644 angular/src/app/components/footer/footer.component.scss create mode 100644 angular/src/app/components/footer/footer.component.spec.ts create mode 100644 angular/src/app/components/footer/footer.component.ts create mode 100644 angular/src/app/components/invite-friends/invite-friends.component.html create mode 100644 angular/src/app/components/invite-friends/invite-friends.component.scss create mode 100644 angular/src/app/components/invite-friends/invite-friends.component.spec.ts create mode 100644 angular/src/app/components/invite-friends/invite-friends.component.ts create mode 100644 angular/src/app/components/last-order/last-order.component.html create mode 100644 angular/src/app/components/last-order/last-order.component.scss create mode 100644 angular/src/app/components/last-order/last-order.component.spec.ts create mode 100644 angular/src/app/components/last-order/last-order.component.ts create mode 100644 angular/src/app/components/social-media-buttons/social-media-buttons.component.html create mode 100644 angular/src/app/components/social-media-buttons/social-media-buttons.component.scss create mode 100644 angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts create mode 100644 angular/src/app/components/social-media-buttons/social-media-buttons.component.ts create mode 100644 angular/src/app/guards/auth-guard.guard.spec.ts create mode 100644 angular/src/app/guards/auth-guard.guard.ts create mode 100644 angular/src/app/pages/guest-card/guest-card.component.html create mode 100644 angular/src/app/pages/guest-card/guest-card.component.scss create mode 100644 angular/src/app/pages/guest-card/guest-card.component.spec.ts create mode 100644 angular/src/app/pages/guest-card/guest-card.component.ts create mode 100644 angular/src/app/pages/login/login.component.html create mode 100644 angular/src/app/pages/login/login.component.scss create mode 100644 angular/src/app/pages/login/login.component.spec.ts create mode 100644 angular/src/app/pages/login/login.component.ts create mode 100644 angular/src/assets/404.gif create mode 100644 angular/src/assets/download-app.png create mode 100644 angular/src/assets/download-app.svg create mode 100644 angular/src/assets/social-media-icons/instagram.svg create mode 100644 angular/src/assets/social-media-icons/vk.svg create mode 100644 angular/src/assets/social-media-icons/youtube.svg diff --git a/angular/README.md b/angular/README.md index f1f8aad..e425b14 100644 --- a/angular/README.md +++ b/angular/README.md @@ -1,4 +1,4 @@ -# FashionLogica +# CoffeeLike This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.0.6. diff --git a/angular/angular.json b/angular/angular.json index 046bb7b..76e1e77 100644 --- a/angular/angular.json +++ b/angular/angular.json @@ -4,7 +4,7 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "fashion-logica": { + "coffee-like": { "projectType": "application", "schematics": { "@schematics/angular:component": { @@ -19,7 +19,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "/var/www/html/lk.crm4retail.ru/fashion-logica", + "outputPath": "/var/www/html/lk.crm4retail.ru/coffee-like", "baseHref": "/", "index": "src/index.html", "main": "src/main.ts", @@ -35,6 +35,7 @@ "src/sw-custom.js" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/purple-green.css", "node_modules/primeng/resources/themes/bootstrap4-light-blue/theme.css", "node_modules/primeicons/primeicons.css", "node_modules/primeng/resources/primeng.min.css", @@ -83,10 +84,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "fashion-logica:build:production" + "browserTarget": "coffee-like:build:production" }, "development": { - "browserTarget": "fashion-logica:build:development" + "browserTarget": "coffee-like:build:development" } }, "defaultConfiguration": "development" @@ -94,7 +95,7 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "fashion-logica:build" + "browserTarget": "coffee-like:build" } }, "test": { @@ -112,6 +113,7 @@ "src/manifest.webmanifest" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/purple-green.css", "src/styles.scss" ], "scripts": [] diff --git a/angular/package-lock.json b/angular/package-lock.json index 9b8ef07..4b1a00f 100644 --- a/angular/package-lock.json +++ b/angular/package-lock.json @@ -1,12 +1,12 @@ { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "dependencies": { "@angular/animations": "^14.0.0", "@angular/cdk": "^14.2.1", @@ -15,6 +15,7 @@ "@angular/core": "^14.0.0", "@angular/fire": "^7.4.1", "@angular/forms": "^14.0.0", + "@angular/material": "^14.2.1", "@angular/platform-browser": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0", "@angular/router": "^14.0.0", @@ -25,11 +26,11 @@ "@fortawesome/free-solid-svg-icons": "^6.2.0", "@types/uuid": "^8.3.4", "angular-moment-timezone": "^1.7.1", - "angularx-qrcode": "^14.0.0", "barcode-2-svg": "^0.3.3", "firebase": "^9.9.3", "google-libphonenumber": "^3.2.30", "jsbarcode": "^3.11.5", + "ng-qrcode": "^7.0.0", "ngx-sharebuttons": "^11.0.0", "primeicons": "^5.0.0", "primeng": "^14.0.1", @@ -665,6 +666,23 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/material": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.1.tgz", + "integrity": "sha512-e7DkKJTuqrSpKPhxahrqkZt6AeU5ld5/aSeCamq2dcdqfZ8otmgiajzN0cXZGwSCT2Lth6c+QV3yn8ufTJQpTw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^14.0.0 || ^15.0.0", + "@angular/cdk": "14.2.1", + "@angular/common": "^14.0.0 || ^15.0.0", + "@angular/core": "^14.0.0 || ^15.0.0", + "@angular/forms": "^14.0.0 || ^15.0.0", + "@angular/platform-browser": "^14.0.0 || ^15.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/platform-browser": { "version": "14.1.3", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.1.3.tgz", @@ -2444,20 +2462,6 @@ "node": ">=0.1.90" } }, - "node_modules/@cordobo/qrcode": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@cordobo/qrcode/-/qrcode-1.5.0.tgz", - "integrity": "sha512-aZ5n3MYw10t4v68EGvRGE1DL7iWfAiTUy4MSZRoqjHTRYdjX40sYgJf48NZa6zZeXVuJOEB/1Ni9KzS+C/EC0w==", - "dependencies": { - "dijkstrajs": "^1.0.1", - "encode-utf8": "^1.0.3", - "pngjs": "^5.0.0", - "yargs": "^17.3.1" - }, - "bin": { - "qrcode": "bin/qrcode" - } - }, "node_modules/@csstools/postcss-cascade-layers": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz", @@ -4480,18 +4484,6 @@ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" }, - "node_modules/angularx-qrcode": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-14.0.0.tgz", - "integrity": "sha512-PfWPz6YpKnTeIYzBjLniKXy/Y4/id0v/dDASQi4756+WYLu94cUMYFndGTFigjeBuk8i5BG0Q8ePHgYYvHbk2w==", - "dependencies": { - "@cordobo/qrcode": "1.5.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": "^14.0.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -5027,7 +5019,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -5845,6 +5836,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -7070,7 +7069,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -8916,7 +8914,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -9626,6 +9623,19 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/ng-qrcode": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", + "dependencies": { + "qrcode": "^1.5.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@angular/common": ">=14 <15", + "@angular/core": ">=14 <15" + } + }, "node_modules/ngx-sharebuttons": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-11.0.0.tgz", @@ -10264,7 +10274,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -10279,7 +10288,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -10328,7 +10336,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -10459,7 +10466,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -11367,6 +11373,114 @@ "node": ">=0.9" } }, + "node_modules/qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -11601,6 +11715,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -12174,8 +12293,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setimmediate": { "version": "1.0.5", @@ -13563,6 +13681,11 @@ "which": "bin/which" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -13708,6 +13831,7 @@ "version": "17.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -13725,6 +13849,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -14157,6 +14282,14 @@ "tslib": "^2.3.0" } }, + "@angular/material": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.1.tgz", + "integrity": "sha512-e7DkKJTuqrSpKPhxahrqkZt6AeU5ld5/aSeCamq2dcdqfZ8otmgiajzN0cXZGwSCT2Lth6c+QV3yn8ufTJQpTw==", + "requires": { + "tslib": "^2.3.0" + } + }, "@angular/platform-browser": { "version": "14.1.3", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.1.3.tgz", @@ -15391,17 +15524,6 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" }, - "@cordobo/qrcode": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@cordobo/qrcode/-/qrcode-1.5.0.tgz", - "integrity": "sha512-aZ5n3MYw10t4v68EGvRGE1DL7iWfAiTUy4MSZRoqjHTRYdjX40sYgJf48NZa6zZeXVuJOEB/1Ni9KzS+C/EC0w==", - "requires": { - "dijkstrajs": "^1.0.1", - "encode-utf8": "^1.0.3", - "pngjs": "^5.0.0", - "yargs": "^17.3.1" - } - }, "@csstools/postcss-cascade-layers": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz", @@ -16999,15 +17121,6 @@ } } }, - "angularx-qrcode": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-14.0.0.tgz", - "integrity": "sha512-PfWPz6YpKnTeIYzBjLniKXy/Y4/id0v/dDASQi4756+WYLu94cUMYFndGTFigjeBuk8i5BG0Q8ePHgYYvHbk2w==", - "requires": { - "@cordobo/qrcode": "1.5.0", - "tslib": "^2.3.0" - } - }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -17399,8 +17512,7 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { "version": "1.0.30001378", @@ -18002,6 +18114,11 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -18846,7 +18963,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -20196,7 +20312,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -20738,6 +20853,15 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "ng-qrcode": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", + "requires": { + "qrcode": "^1.5.0", + "tslib": "^2.4.0" + } + }, "ngx-sharebuttons": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-11.0.0.tgz", @@ -21210,7 +21334,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -21219,7 +21342,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -21254,8 +21376,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pacote": { "version": "13.3.0", @@ -21361,8 +21482,7 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -21916,6 +22036,92 @@ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, + "qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -22096,6 +22302,11 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -22531,8 +22742,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setimmediate": { "version": "1.0.5", @@ -23541,6 +23751,11 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -23647,6 +23862,7 @@ "version": "17.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -23660,7 +23876,8 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, "zone.js": { "version": "0.11.8", diff --git a/angular/package.json b/angular/package.json index 8071257..d3d91df 100644 --- a/angular/package.json +++ b/angular/package.json @@ -1,6 +1,6 @@ { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "scripts": { "ng": "ng", "start": "ng serve --host 192.168.0.14", @@ -17,6 +17,7 @@ "@angular/core": "^14.0.0", "@angular/fire": "^7.4.1", "@angular/forms": "^14.0.0", + "@angular/material": "^14.2.1", "@angular/platform-browser": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0", "@angular/router": "^14.0.0", @@ -27,11 +28,11 @@ "@fortawesome/free-solid-svg-icons": "^6.2.0", "@types/uuid": "^8.3.4", "angular-moment-timezone": "^1.7.1", - "angularx-qrcode": "^14.0.0", "barcode-2-svg": "^0.3.3", "firebase": "^9.9.3", "google-libphonenumber": "^3.2.30", "jsbarcode": "^3.11.5", + "ng-qrcode": "^7.0.0", "ngx-sharebuttons": "^11.0.0", "primeicons": "^5.0.0", "primeng": "^14.0.1", diff --git a/angular/src/app/app-routing.module.ts b/angular/src/app/app-routing.module.ts index 0297262..0764816 100644 --- a/angular/src/app/app-routing.module.ts +++ b/angular/src/app/app-routing.module.ts @@ -1,7 +1,22 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { MainComponent } from './pages/main/main.component'; +import { GuestCardComponent } from './pages/guest-card/guest-card.component'; +import { LoginComponent } from './pages/login/login.component'; +import { AuthGuard } from './guards/auth-guard.guard'; -const routes: Routes = []; +const routes: Routes = [ + { + path: '', + component: GuestCardComponent, + canActivate: [AuthGuard] + }, + { + path: 'login', + component: LoginComponent + } + // { path: '**', component: NotFoundComponent } +]; @NgModule({ imports: [RouterModule.forRoot(routes)], diff --git a/angular/src/app/app.component.html b/angular/src/app/app.component.html index 0680b43..4cca73f 100644 --- a/angular/src/app/app.component.html +++ b/angular/src/app/app.component.html @@ -1 +1,2 @@ + diff --git a/angular/src/app/app.component.spec.ts b/angular/src/app/app.component.spec.ts index 3d2ba4f..7a983ae 100644 --- a/angular/src/app/app.component.spec.ts +++ b/angular/src/app/app.component.spec.ts @@ -20,16 +20,16 @@ describe('AppComponent', () => { expect(app).toBeTruthy(); }); - it(`should have as title 'fashion-logica'`, () => { + it(`should have as title 'coffee-like'`, () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; - expect(app.title).toEqual('fashion-logica'); + expect(app.title).toEqual('coffee-like'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('fashion-logica app is running!'); + expect(compiled.querySelector('.content span')?.textContent).toContain('coffee-like app is running!'); }); }); diff --git a/angular/src/app/app.component.ts b/angular/src/app/app.component.ts index ddeca86..4fe43c3 100644 --- a/angular/src/app/app.component.ts +++ b/angular/src/app/app.component.ts @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.scss'] }) export class AppComponent { - title = 'Fashionlogica'; + title = 'Coffee Like'; } diff --git a/angular/src/app/app.module.ts b/angular/src/app/app.module.ts index f714d39..c48e111 100644 --- a/angular/src/app/app.module.ts +++ b/angular/src/app/app.module.ts @@ -28,12 +28,20 @@ import { MessageService } from 'primeng/api'; import { FooterButtonsComponent } from './components/footer-buttons/footer-buttons.component'; import { UserDataComponent } from './pages/account/user-data/user-data.component'; import { RefSystemComponent } from './pages/account/ref-system/ref-system.component'; -import { QRCodeModule } from 'angularx-qrcode'; import { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; import { ShareIconsModule } from 'ngx-sharebuttons/icons'; import { MessagingService } from './services/messaging.service'; import { NotFoundComponent } from './pages/not-found/not-found.component'; import { DownloadAppDirective } from './directives/download-app.directive'; +import {MatIconModule} from '@angular/material/icon'; +import { GuestCardComponent } from './pages/guest-card/guest-card.component'; +import { QrCodeModule } from 'ng-qrcode'; +import { AccordionComponent } from './components/accordion/accordion.component'; +import { LastOrderComponent } from './components/last-order/last-order.component'; +import { InviteFriendsComponent } from './components/invite-friends/invite-friends.component'; +import { FooterComponent } from './components/footer/footer.component'; +import { SocialMediaButtonsComponent } from './components/social-media-buttons/social-media-buttons.component'; +import { LoginComponent } from './pages/login/login.component'; @NgModule({ declarations: [ @@ -51,18 +59,18 @@ import { DownloadAppDirective } from './directives/download-app.directive'; UserDataComponent, RefSystemComponent, NotFoundComponent, - DownloadAppDirective + DownloadAppDirective, + GuestCardComponent, + AccordionComponent, + LastOrderComponent, + InviteFriendsComponent, + FooterComponent, + SocialMediaButtonsComponent, + LoginComponent ], imports: [ BrowserModule, AppRoutingModule, - RouterModule.forRoot([ - { - path: '**', - component: MainComponent - }, - // { path: '**', component: NotFoundComponent } - ]), InputMaskModule, ProgressSpinnerModule, FormsModule, @@ -79,11 +87,12 @@ import { DownloadAppDirective } from './directives/download-app.directive'; AngularFireMessagingModule, ToastModule, ReactiveFormsModule, - QRCodeModule, ShareButtonsModule.withConfig({ debug: true }), - ShareIconsModule + ShareIconsModule, + MatIconModule, + QrCodeModule ], providers: [DialogService, MessageService, MessagingService ], bootstrap: [AppComponent] diff --git a/angular/src/app/components/accordion/accordion.component.html b/angular/src/app/components/accordion/accordion.component.html new file mode 100644 index 0000000..3af52b9 --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.html @@ -0,0 +1,7 @@ +
+ + +
+ +
+
diff --git a/angular/src/app/components/accordion/accordion.component.scss b/angular/src/app/components/accordion/accordion.component.scss new file mode 100644 index 0000000..68f274d --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.scss @@ -0,0 +1,85 @@ +:host { + width: 100%; +} + +.tab { + position: relative; + margin-bottom: 1px; + width: 100%; + color: #fff; + overflow: hidden; + border-bottom: solid 1px #bdbdbd; +} +.tab input { + position: absolute; + opacity: 0; + z-index: -1; +} +.tab label { + display: block; + padding: 20px 26px; + position: relative; + background: #ffffff00; + font-weight: 400; + font-size: 12px; + line-height: 14px; + letter-spacing: -0.5px; + cursor: pointer; +} +// .tab label:before { +// display: block; +// content: " "; +// padding-top: 5px; +// } +.tab-content { + max-height: 0; + overflow: hidden; + background: #292929; + -webkit-transition: all 0.35s; + -o-transition: all 0.35s; + transition: all 0.35s; + border-top: solid 1px #bdbdbd; + font-style: normal; + font-weight: 400; + font-size: 12px; + + p { + margin: 0; + } +} +.tab-content p { + margin: 1em; +} +/* :checked */ +.tab input:checked ~ .tab-content { + padding: 16px 26px; + max-height: 100vh; +} + +/* Icon */ +.tab label::after { + position: absolute; + right: 0; + top: 0; + line-height: 3; + text-align: center; + -webkit-transition: all 0.35s; + -o-transition: all 0.35s; + transition: all 0.35s; + height: 100%; + margin-right: 12px; + display: flex; + align-items: center; +} +.tab input[type="checkbox"] + label::after { + content: "+"; +} +.tab input[type="radio"] + label::after { + content: "\25BC"; +} +.tab input[type="checkbox"]:checked + label::after { + transform: rotate(315deg); +} +.tab input[type="radio"]:checked + label::after { + transform: rotateX(180deg); +} diff --git a/angular/src/app/components/accordion/accordion.component.spec.ts b/angular/src/app/components/accordion/accordion.component.spec.ts new file mode 100644 index 0000000..73cc3e3 --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccordionComponent } from './accordion.component'; + +describe('AccordionComponent', () => { + let component: AccordionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AccordionComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AccordionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/accordion/accordion.component.ts b/angular/src/app/components/accordion/accordion.component.ts new file mode 100644 index 0000000..1958e5e --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.ts @@ -0,0 +1,23 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { v4 as uuidv4 } from 'uuid'; + +export interface IAccordionData { + header: string; + body: string; +} + +@Component({ + selector: 'app-accordion[header]', + templateUrl: './accordion.component.html', + styleUrls: ['./accordion.component.scss'] +}) +export class AccordionComponent implements OnInit { + @Input() header!: string + public guid: string = uuidv4() + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/exit/exit.component.scss b/angular/src/app/components/exit/exit.component.scss index a8d444c..97f229d 100644 --- a/angular/src/app/components/exit/exit.component.scss +++ b/angular/src/app/components/exit/exit.component.scss @@ -2,7 +2,7 @@ button { margin-right: 1rem; padding: 4px 21px; margin-top: 8px; - background-color: #09467f; + background-color: var(--main-color); color: #fff; border-radius: 3px; border: none; diff --git a/angular/src/app/components/footer-buttons/footer-buttons.component.scss b/angular/src/app/components/footer-buttons/footer-buttons.component.scss index a027c25..67d0f72 100644 --- a/angular/src/app/components/footer-buttons/footer-buttons.component.scss +++ b/angular/src/app/components/footer-buttons/footer-buttons.component.scss @@ -15,7 +15,7 @@ align-items: center; width: 60px; height: 60px; - background: #09467f; + background: var(--main-color); border: solid #fff 1px !important; color: #fff; border-radius: 100%; diff --git a/angular/src/app/components/footer/footer.component.html b/angular/src/app/components/footer/footer.component.html new file mode 100644 index 0000000..a3bb425 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.html @@ -0,0 +1,4 @@ +Логотип +

Горячая линия

+8 (800) 333-41-30 + diff --git a/angular/src/app/components/footer/footer.component.scss b/angular/src/app/components/footer/footer.component.scss new file mode 100644 index 0000000..04b6b18 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.scss @@ -0,0 +1,27 @@ +:host { + display: flex; + flex-direction: column; + align-items: center; + gap: 20px; + padding-bottom: 100px; + h3 { + margin: 0; + font-style: normal; + font-weight: 400; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.24px; + color: #6a737c; + } + .phone-number { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + color: #d9d9d9; + text-decoration: none; + } +} diff --git a/angular/src/app/components/footer/footer.component.spec.ts b/angular/src/app/components/footer/footer.component.spec.ts new file mode 100644 index 0000000..953b22c --- /dev/null +++ b/angular/src/app/components/footer/footer.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ FooterComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/footer/footer.component.ts b/angular/src/app/components/footer/footer.component.ts new file mode 100644 index 0000000..c7a7ec5 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/invite-friends/invite-friends.component.html b/angular/src/app/components/invite-friends/invite-friends.component.html new file mode 100644 index 0000000..5a52e20 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.html @@ -0,0 +1,15 @@ +

Пригласи друзей!

+
+

+ Пригласи друзей зарегистрироваться в приложении по твоему уникальному коду и + получи бонусы, когда они совершат первую покупку. +

+ +
diff --git a/angular/src/app/components/invite-friends/invite-friends.component.scss b/angular/src/app/components/invite-friends/invite-friends.component.scss new file mode 100644 index 0000000..0ff76c3 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.scss @@ -0,0 +1,33 @@ +:host { + padding: 16px; + h2 { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + letter-spacing: -0.408px; + } + + & .container { + width: 100%; + display: flex; + flex-direction: row; + gap: 16px; + + p { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: #ffffff; + } + + .share { + width: 72px; + height: 48px; + background: #28af49; + padding: 8px 26px; + border: none; + } + } +} diff --git a/angular/src/app/components/invite-friends/invite-friends.component.spec.ts b/angular/src/app/components/invite-friends/invite-friends.component.spec.ts new file mode 100644 index 0000000..2c9c394 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InviteFriendsComponent } from './invite-friends.component'; + +describe('InviteFriendsComponent', () => { + let component: InviteFriendsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ InviteFriendsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(InviteFriendsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/invite-friends/invite-friends.component.ts b/angular/src/app/components/invite-friends/invite-friends.component.ts new file mode 100644 index 0000000..8f48f3d --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-invite-friends', + templateUrl: './invite-friends.component.html', + styleUrls: ['./invite-friends.component.scss'] +}) +export class InviteFriendsComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/last-order/last-order.component.html b/angular/src/app/components/last-order/last-order.component.html new file mode 100644 index 0000000..deb5430 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.html @@ -0,0 +1,11 @@ +

Ваш предыдущий заказ

+
+

Дата: 25 марта 2023 года

+

На сумму: 230 ₽

+
+ +

+ Списание бонусов возможно на любые категории. Бонусами можно оплатить 100% + суммы покупки. Бонусы начисляются только на напитки с учётом добавок. + Неиспользованные бонусы сгорают в течение 90 дней. +

diff --git a/angular/src/app/components/last-order/last-order.component.scss b/angular/src/app/components/last-order/last-order.component.scss new file mode 100644 index 0000000..0184346 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.scss @@ -0,0 +1,45 @@ +:host { + padding: 24px 16px 56px; + + & > h2 { + font-style: normal; + font-weight: 700; + font-size: 15px; + line-height: 20px; + letter-spacing: -0.24px; + } + + & > .info-order { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + span { + color: #828282; + } + } + + .evaluate-order { + margin: 24px 0; + width: 100%; + padding: 12px; + text-align: center; + border: 2px solid #28af49; + border-radius: 6px; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + letter-spacing: -0.408px; + background-color: transparent; + color: #28af49; + } + + .info { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: rgba(255, 255, 255, 0.5); + } +} diff --git a/angular/src/app/components/last-order/last-order.component.spec.ts b/angular/src/app/components/last-order/last-order.component.spec.ts new file mode 100644 index 0000000..101c8ed --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LastOrderComponent } from './last-order.component'; + +describe('LastOrderComponent', () => { + let component: LastOrderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LastOrderComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LastOrderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/last-order/last-order.component.ts b/angular/src/app/components/last-order/last-order.component.ts new file mode 100644 index 0000000..d5746d2 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-last-order', + templateUrl: './last-order.component.html', + styleUrls: ['./last-order.component.scss'] +}) +export class LastOrderComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/navbar/navbar.component.html b/angular/src/app/components/navbar/navbar.component.html index 398caac..af71b4c 100644 --- a/angular/src/app/components/navbar/navbar.component.html +++ b/angular/src/app/components/navbar/navbar.component.html @@ -1,3 +1,5 @@
- Логотип + +

{{title}}

+
diff --git a/angular/src/app/components/navbar/navbar.component.scss b/angular/src/app/components/navbar/navbar.component.scss index d7f8be2..3e52122 100644 --- a/angular/src/app/components/navbar/navbar.component.scss +++ b/angular/src/app/components/navbar/navbar.component.scss @@ -1,14 +1,29 @@ .container { - box-sizing: border-box; - padding: 7px 0 0 5px; - width: 100%; - height: 39px; - background: #09467F; - color: #fff; + box-sizing: border-box; + padding: 12px 16px; + width: 100%; + background: #231f20; + box-shadow: 0px 8px 16px rgba(17, 17, 17, 0.5); + color: #fff; + display: flex; + align-items: center; + justify-content: space-between; + .back-arrow { + font-size: 16px; + display: flex; + align-items: center; + justify-content: center; + } + .plug { + height: 24px; + width: 24px; + visibility: hidden; + } + .title { + font-family: "Gotham Pro", sans-serif; + font-weight: 700; + font-size: 17px; + line-height: 22px; + margin: 0; + } } - -.title { - font-weight: 400; - font-size: 18px; - margin-left: 12px; -} \ No newline at end of file diff --git a/angular/src/app/components/navbar/navbar.component.ts b/angular/src/app/components/navbar/navbar.component.ts index 6a9bec8..c58fad0 100644 --- a/angular/src/app/components/navbar/navbar.component.ts +++ b/angular/src/app/components/navbar/navbar.component.ts @@ -1,11 +1,12 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ - selector: 'app-navbar', + selector: 'app-navbar[title]', templateUrl: './navbar.component.html', styleUrls: ['./navbar.component.scss'] }) export class NavbarComponent implements OnInit { + @Input() title: string = 'Название не задано' constructor() { } diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.html b/angular/src/app/components/social-media-buttons/social-media-buttons.component.html new file mode 100644 index 0000000..98fc383 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.html @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss b/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss new file mode 100644 index 0000000..6cd7512 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss @@ -0,0 +1,15 @@ +:host { + display: flex; + flex-direction: row; + gap: 16px; + justify-content: space-between; + a { + width: 48px; + height: 48px; + border-radius: 100%; + background: #333333; + display: flex; + align-items: center; + justify-content: center; + } +} \ No newline at end of file diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts b/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts new file mode 100644 index 0000000..b8cd680 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SocialMediaButtonsComponent } from './social-media-buttons.component'; + +describe('SocialMediaButtonsComponent', () => { + let component: SocialMediaButtonsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SocialMediaButtonsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SocialMediaButtonsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts b/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts new file mode 100644 index 0000000..2c659b0 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; + +export interface ISocialMediaLink { + url: string; + imgUrl: string; + label: string; +} + +@Component({ + selector: 'app-social-media-buttons', + templateUrl: './social-media-buttons.component.html', + styleUrls: ['./social-media-buttons.component.scss'] +}) +export class SocialMediaButtonsComponent implements OnInit { + public links: ISocialMediaLink[] = [ + { + label: 'Инстаграм', + url: 'https://www.instagram.com/', + imgUrl: '/assets/social-media-icons/instagram.svg' + }, + { + label: 'ВК', + url: 'https://vk.com/coffeelike_com', + imgUrl: '/assets/social-media-icons/vk.svg' + }, + { + label: 'Youtube', + url: 'https://www.youtube.com/c/coffeelikeru', + imgUrl: '/assets/social-media-icons/youtube.svg' + } + ] + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/guards/auth-guard.guard.spec.ts b/angular/src/app/guards/auth-guard.guard.spec.ts new file mode 100644 index 0000000..29c9ce4 --- /dev/null +++ b/angular/src/app/guards/auth-guard.guard.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AuthGuard } from './auth-guard.guard'; + +describe('AuthGuardGuard', () => { + let guard: AuthGuard; + + beforeEach(() => { + TestBed.configureTestingModule({}); + guard = TestBed.inject(AuthGuard); + }); + + it('should be created', () => { + expect(guard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/guards/auth-guard.guard.ts b/angular/src/app/guards/auth-guard.guard.ts new file mode 100644 index 0000000..8691ed4 --- /dev/null +++ b/angular/src/app/guards/auth-guard.guard.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + CanActivate, + CanActivateChild, + Router, + RouterStateSnapshot, + UrlTree, +} from '@angular/router'; +import { Observable, of } from 'rxjs'; +import { CookiesService } from '../services/cookies.service'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate, CanActivateChild { + constructor(private cookiesService: CookiesService, private router: Router) {} + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): + | Observable + | Promise + | boolean + | UrlTree + { + if (this.cookiesService.getItem('token')) { + return of(true); + } else { + this.router.navigate(['/login']); + return of(false); + } + } + + canActivateChild( + childRoute: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): + | boolean + | UrlTree + | Observable + | Promise + { + return this.canActivate(childRoute, state); + } +} diff --git a/angular/src/app/pages/account/account.component.html b/angular/src/app/pages/account/account.component.html index 39afb06..d536ebe 100644 --- a/angular/src/app/pages/account/account.component.html +++ b/angular/src/app/pages/account/account.component.html @@ -4,7 +4,7 @@ 'auth-page': currentPage.code === PageCode.Auth }" > -
@@ -68,7 +68,7 @@ /> @@ -84,7 +84,7 @@ - + --> - + > --> console.log('Successful share')) diff --git a/angular/src/app/pages/guest-card/guest-card.component.html b/angular/src/app/pages/guest-card/guest-card.component.html new file mode 100644 index 0000000..abf93cf --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.html @@ -0,0 +1,134 @@ + +
+
+ +
+
+ За период с 11.01.2023 по 31.03.2023 вам начислено 360 бонусов +
+ +

+ Расчет начисления бонусов - 10% от суммы покупок за период с 11.01.2023г. + по 31.03.2023 г. +

+

+ За период с 11.01.2023г. по 31.03.2023 г. сумма ваших покупок составила + 3700 руб. +

+

Начисляемый бонус 10% от суммы покупок

+
+ +

+ Участник может использовать Бонусы для «оплаты» до 100% стоимости любой + покупки. +

+

+ Списание Бонусов происходит из расчета 1:1 (один Бонус дает скидку 1 + российский рубль / 1 тенге / 1 белорусский рубль. Скидка, предоставляемая + Участнику при списании Бонусов, уменьшает цену товаров в заказе в + соответствии с условиями ПЛ. +

+

+ Для списания Бонусов Участник должен попросить об этом в кофе-баре сети + «COFFEE LIKE» кассира до момента пробития фискального чека, после чего им + будет проверена возможность списания Бонусов. +

+

+ Для всех Участников возможно списание без использования мобильного + приложения. +

+

Полученные Бонусы не подлежат обмену на денежные средства.

+
+ +

+ Начисленные на счет бонусы сгорают по прошествии 90 дней с момента + совершения последней покупки с начислением или списанием бонусов. +

+ +
    + Возврат покупки, за которую бонусы были начислены: +
  • + В случае, если бонусов на счету достаточно для списания, бонусы + списываются в полном ранее начисленном за возвращаемый товар объеме. +
  • +
  • + В случае, если бонусов на счету недостаточно, формируется минусовой + баланс. +
  • +
+ +
    + Возврат покупки, которая была оплачена бонусами: +
  • + В случае предъявления Участником кассового или товарного чека, сумма + бонусов, списанная для оплаты возвращаемого товара, зачисляется на счет + участника. +
  • +
  • + В случае возврата товара с применением оплаты бонусами, клиенту + возвращается денежная сумма в размере, внесенном Участником в оплату + товара при покупке, за вычетом суммы, оплаченной бонусами. +
  • +
+
+ +
+ Сумма ваших покупок за период с 01.04.2023г. - 1200 руб. +
+ +

+ Начисление Бонусных баллов происходит по дифференцированной шкале в + зависимости от уровня: +

+ +
    + Уровень 1 +
  • Сумма покупок за предыдущий период 0-1600 руб.
  • +
  • Начисляемый бонус 3% от суммы покупки
  • +
+
+
    + Уровень 2 +
  • Сумма покупок за предыдущий период 1601-3600 руб.
  • +
  • Начисляемый бонус 6% от суммы покупки
  • +
+
+
    + Уровень 3 +
  • Сумма покупок за предыдущий период  3601-8600 руб.
  • +
  • Начисляемый бонус 10% от суммы покупки
  • +
+
+
    + Уровень 4 +
  • Сумма покупок за предыдущий период — от 8601 руб.
  • +
  • Начисляемый бонус, в % от суммы покупки - 15%
  • +
+
+ +
+

+ До следующего уровня за период с 01.04.2023 по 30.06.2023г осталось + совершить покупки на 401 рублей +

+ + +

Узнать условия начисления бонусов

+
+
+ +
+ +
+
+ Скачай приложение +
+ Подробнее о правилах
Программы лояльности
+
diff --git a/angular/src/app/pages/guest-card/guest-card.component.scss b/angular/src/app/pages/guest-card/guest-card.component.scss new file mode 100644 index 0000000..1ad1850 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.scss @@ -0,0 +1,191 @@ +:host { + .guest-card { + display: flex; + flex-direction: column; + align-items: center; + padding: 8px 0 0; + max-width: 600px; + margin: 0 auto; + + &__qr { + padding: 10px; + width: fit-content; + background-image: linear-gradient( + #fff 33%, + transparent 0px, + transparent 67%, + #fff 0px + ), + linear-gradient( + 90deg, + #ffe 33%, + transparent 0px, + transparent 66%, + #fff 0px + ), + linear-gradient(#fff 33%, transparent 0px, transparent 67%, #fff 0), + linear-gradient(90deg, #fff 33%, transparent 0, transparent 66%, #fff 0); + background-size: 1px 100%, 100% 1px, 1px 100%, 100% 1px; + background-position: 0 0, 0 0, 100% 100%, 100% 100%; + background-repeat: no-repeat, no-repeat, no-repeat, no-repeat; + cursor: pointer; + } + + &__user-description { + margin: 18px 0 0; + padding: 14px 24px; + width: 100%; + text-align: left; + border-top: 1px solid #fff; + border-bottom: 1px solid #fff; + // font-family: "Goldman"; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: -0.5px; + + span { + color: #f2994a; + } + } + + &__purchases-description { + margin: 0; + padding: 14px 24px; + width: 100%; + text-align: left; + border-bottom: 1px solid #fff; + // font-family: "Goldman"; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: -0.5px; + + span { + color: #219653; + } + } + + &__level-info { + padding: 36px; + + h2 { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + } + + input[type="range"] { + -webkit-appearance: none; + width: 100%; + height: 6px; + border-radius: 5px; + display: block; + position: relative; + background: #231f20; + box-shadow: 0px 0px 3px #f2c94c59; + background-image: linear-gradient(#f2c94c, #f2c94c); + background-size: 70% 100%; + background-repeat: no-repeat; + + &::before, + &::after { + content: " "; + display: block; + width: 16px; + height: 16px; + border-radius: 100%; + position: absolute; + top: -5px; + } + + &::before { + background-color: #f2c94c; + left: 0px; + } + + &::after { + background-color: #f2c94c; + right: 0px; + } + + &::-webkit-slider-thumb { + -webkit-appearance: none; + background: #f2c94c; + width: 16px; + height: 16px; + border-radius: 100%; + } + + &::-ms-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #f2c94c; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; + transition: background 0.3s ease-in-out; + } + + &::-moz-range-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #f2c94c; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; + transition: background 0.3s ease-in-out; + } + } + + & > .show-more { + margin-top: 42px; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-align: center; + color: #28af49; + } + } + + &__download-app { + width: 100%; + position: relative; + margin-top: 32px; + display: flex; + justify-content: flex-end; + img { + width: 100%; + max-width: calc(100% - 16px); + } + } + + &__loyalty-program { + text-align: center; + color: rgba(255, 255, 255, 0.5); + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-decoration: none; + margin: 17px 0 22px; + } + } +} + +app-accordion { + ul { + li { + list-style-type: disc; + margin-left: 16px; + } + } +} diff --git a/angular/src/app/pages/guest-card/guest-card.component.spec.ts b/angular/src/app/pages/guest-card/guest-card.component.spec.ts new file mode 100644 index 0000000..f9a4d88 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuestCardComponent } from './guest-card.component'; + +describe('GuestCardComponent', () => { + let component: GuestCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ GuestCardComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(GuestCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/pages/guest-card/guest-card.component.ts b/angular/src/app/pages/guest-card/guest-card.component.ts new file mode 100644 index 0000000..1ea6044 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { IAccordionData } from 'src/app/components/accordion/accordion.component'; + +@Component({ + selector: 'app-guest-card', + templateUrl: './guest-card.component.html', + styleUrls: ['./guest-card.component.scss'], +}) +export class GuestCardComponent implements OnInit { + public qrCodeSize: number = 85; + private isQrCodeClicked: boolean = false; + + public discountLevel: number = 4.2; + + constructor() {} + + ngOnInit(): void {} + + qrCodeClick() { + this.isQrCodeClicked = !this.isQrCodeClicked; + this.qrCodeSize = this.isQrCodeClicked ? 180 : 85; + } +} diff --git a/angular/src/app/pages/login/login.component.html b/angular/src/app/pages/login/login.component.html new file mode 100644 index 0000000..7f6f7f2 --- /dev/null +++ b/angular/src/app/pages/login/login.component.html @@ -0,0 +1,26 @@ +

Участвуй в программе лояльности COFFEE LIKE

+

Начни получать бонусы прямо сейчас

+
+
+ + +
+
+ + +
+

+ Используя приложение, вы принимаете условия в соглашениях и + соглашаетесь на получение рекламно-информационных сообщений +

+ +
+ + +

Введите код из SMS

+
+ + +
+

Не пришло SMS?
Отправим повторно через секунд

+
diff --git a/angular/src/app/pages/login/login.component.scss b/angular/src/app/pages/login/login.component.scss new file mode 100644 index 0000000..2f200ea --- /dev/null +++ b/angular/src/app/pages/login/login.component.scss @@ -0,0 +1,137 @@ +:host { + padding-top: 48px; + display: flex; + flex-direction: column; + align-items: center; + max-width: 600px; + margin: 0 auto 52px; + + h1 { + width: 302px; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + } + + h2 { + margin-top: 44px; + font-style: normal; + font-weight: 700; + font-size: 20px; + line-height: 24px; + text-align: center; + letter-spacing: 0.38px; + } + + .description { + width: 180px; + font-style: normal; + font-weight: 400; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.24px; + margin-top: 16px; + } + + form { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 35px; + + .offer { + margin-top: 10px; + padding: 0 16px; + font-family: "Gowun Dodum"; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 17px; + text-align: center; + span { + color: #13a538; + } + } + + .input-container { + position: relative; + width: 100%; + + label { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: #6a737c; + text-align: left; + position: absolute; + top: 10px; + left: 16px; + } + + input { + width: 100%; + padding: 24px 16px 8px; + background-color: #252323; + margin-bottom: 16px; + border: none; + border-top: solid #6a737c 1px; + border-bottom: solid #6a737c 1px; + color: #6a737c; + font-style: normal; + font-weight: 400; + font-size: 22px; + line-height: 28px; + } + } + + button { + height: 46px; + width: calc(100% - 32px); + padding: 10px 24px; + background: #28af49; + border-radius: 6px; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + border: none; + letter-spacing: -0.408px; + color: #ffffff; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + } + } + + .code-form { + width: 100%; + input { + width: 100%; + padding: 24px 16px 8px; + background-color: #252323; + margin-bottom: 16px; + border: none; + border-top: solid #6a737c 1px; + border-bottom: solid #6a737c 1px; + color: #6a737c; + font-style: normal; + font-weight: 400; + font-size: 22px; + line-height: 28px; + } + } + + .resend-code { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-align: center; + } +} diff --git a/angular/src/app/pages/login/login.component.spec.ts b/angular/src/app/pages/login/login.component.spec.ts new file mode 100644 index 0000000..10eca24 --- /dev/null +++ b/angular/src/app/pages/login/login.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LoginComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/pages/login/login.component.ts b/angular/src/app/pages/login/login.component.ts new file mode 100644 index 0000000..a1ff1fc --- /dev/null +++ b/angular/src/app/pages/login/login.component.ts @@ -0,0 +1,25 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { CookiesService } from 'src/app/services/cookies.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.scss'], +}) +export class LoginComponent implements OnInit { + isShowNumber: boolean = true; + + constructor(private cookiesService: CookiesService, private router: Router) {} + + ngOnInit(): void {} + + submitNumber() { + this.isShowNumber = false; + } + + submitCode() { + this.cookiesService.setCookie('token', 'test') + this.router.navigate(['/']) + } +} diff --git a/angular/src/app/pages/main/main.component.html b/angular/src/app/pages/main/main.component.html index 7e1c743..2b74341 100644 --- a/angular/src/app/pages/main/main.component.html +++ b/angular/src/app/pages/main/main.component.html @@ -1,7 +1,7 @@
- + -
\ No newline at end of file + \ No newline at end of file diff --git a/angular/src/app/pages/not-found/not-found.component.html b/angular/src/app/pages/not-found/not-found.component.html index 65401b6..79333bd 100644 --- a/angular/src/app/pages/not-found/not-found.component.html +++ b/angular/src/app/pages/not-found/not-found.component.html @@ -1,5 +1,5 @@
- +

404

Упс, что-то пошло не так!

diff --git a/angular/src/app/pages/not-found/not-found.component.scss b/angular/src/app/pages/not-found/not-found.component.scss index 0f45331..f4a3750 100644 --- a/angular/src/app/pages/not-found/not-found.component.scss +++ b/angular/src/app/pages/not-found/not-found.component.scss @@ -6,14 +6,14 @@ h1 { font-size: 108px; font-weight: 600; - color: #09467f; + color: var(--main-color); } p { margin: 16px 0; font-size: 14px; } button { - background-color: #09467f; + background-color: var(--main-color); color: #fff; border-radius: 8px; display: flex; diff --git a/angular/src/assets/404.gif b/angular/src/assets/404.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf3f75ec1aa084794f2cb59c7e23cfaf9e50928a GIT binary patch literal 17602 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 literal 0 HcmV?d00001 diff --git a/angular/src/assets/download-app.png b/angular/src/assets/download-app.png new file mode 100644 index 0000000000000000000000000000000000000000..a70e559f12d2d30fe36741317a365460c41af8b6 GIT binary patch literal 67184 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

$W@AT}zu7v?Vg>#Q=+yi>%)+gT8Hj`-Pid-H} zfZTf!AVsQu?Ik#U2zfL{2EPDy^ zNJyE}9(*}uOav)M0XtR+8XE_1eybOln`l9Ob<~0L_Pg z+6Z3Anl%JKVO_O8G|9t&VzjKz4JQPxgE`vd>5DjBWou11@|kU*>Hc%ulgiZoteYv30o z2on;lr=l$Pq4Z$fjel}~?JwZ0sc&jYY$;{&n)DQ9$6j3rCJ`w3X*&vqj22F>Z69tht@pkEKn^bBR%qIXoqVC zSe-h+>F-1E&ZUDizZd#fnJ#|S@@-Nl~$Tw zZ1(}SMf#9^=IOz10K5R^#aN8j8R^tVjWwz~pp3VlVNiPcvq|V-)P-$3wYkLaF*PkR zX5N*^0I3H$YA)gB-EOyOZpUh1Z&iM(x5iE$EPwF%ho-CuppB@x%l_?VH= z2;$;?v@Bh<S?49wKS|(vqJsWeunUTV#txHBmMDkzifU0m!m}x3O*2P33#b(vavFGgd}5k_-Ss z(9Go$EECsBf=)w@nS;iguXA-v*Xhc5(Fo63TQ0F`Lxynq5R&2Dw^ix=yKS z)j-G47FE770P6f=cZPo-Bn;Ugq!#)$HsYTFI~U*}k3R=V7Dp)|d$hj*0000 + + + + + + + + + + diff --git a/angular/src/assets/logo.svg b/angular/src/assets/logo.svg index 8ac9adb..335e233 100644 --- a/angular/src/assets/logo.svg +++ b/angular/src/assets/logo.svg @@ -1,9 +1,9 @@ - - + + - + - + diff --git a/angular/src/assets/social-media-icons/instagram.svg b/angular/src/assets/social-media-icons/instagram.svg new file mode 100644 index 0000000..533dde1 --- /dev/null +++ b/angular/src/assets/social-media-icons/instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/angular/src/assets/social-media-icons/vk.svg b/angular/src/assets/social-media-icons/vk.svg new file mode 100644 index 0000000..39c8c45 --- /dev/null +++ b/angular/src/assets/social-media-icons/vk.svg @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/assets/social-media-icons/youtube.svg b/angular/src/assets/social-media-icons/youtube.svg new file mode 100644 index 0000000..dc1aa75 --- /dev/null +++ b/angular/src/assets/social-media-icons/youtube.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/environments/environment.prod.ts b/angular/src/environments/environment.prod.ts index 88ca8e9..ca311d1 100644 --- a/angular/src/environments/environment.prod.ts +++ b/angular/src/environments/environment.prod.ts @@ -7,7 +7,7 @@ export const environment = { appWPEndpoint: 'http://213.239.210.240:4500/wp-json/woofood/v1/', hasBonusProgram: true, systemId: 'g6zyv8tj53w28ov7cl', - defaultUrl: 'https://fashionlogica.lk.crm4retail.ru', + defaultUrl: 'https://coffee-like.lk.crm4retail.ru', firebase: { apiKey: "AIzaSyCnKvln5itnrBj62POCPHxshAN_Vmd0zds", authDomain: "fashionlogicanotification.firebaseapp.com", @@ -20,5 +20,5 @@ export const environment = { version: packageJson.version, appleWalletEndpoint: 'https://apple-push-notifications.it-retail.tech/apns/api', appleWalletSecret: 'Token F5mbzEERAznGKVbB6l', - clientName: 'fashionlogica' + clientName: 'coffeeLike' } diff --git a/angular/src/environments/environment.ts b/angular/src/environments/environment.ts index d14cf8d..6059fbc 100644 --- a/angular/src/environments/environment.ts +++ b/angular/src/environments/environment.ts @@ -20,5 +20,5 @@ export const environment = { version: packageJson.version, appleWalletEndpoint: 'http://192.168.0.179:4200/apns/api', appleWalletSecret: 'Token F5mbzEERAznGKVbB6l', - clientName: 'fashionlogica' + clientName: 'coffeeLike' }; diff --git a/angular/src/index.html b/angular/src/index.html index c890b74..6195f09 100644 --- a/angular/src/index.html +++ b/angular/src/index.html @@ -2,7 +2,7 @@ - Fashionlogica + Coffee Like @@ -13,8 +13,11 @@ + + + - + diff --git a/angular/src/manifest.webmanifest b/angular/src/manifest.webmanifest index 651c69c..a2def98 100644 --- a/angular/src/manifest.webmanifest +++ b/angular/src/manifest.webmanifest @@ -1,6 +1,6 @@ { - "name": "Fashionlogica", - "short_name": "Fashionlogica", + "name": "Coffee Like", + "short_name": "Coffee Like", "theme_color": "#1976d2", "background_color": "#fafafa", "display": "standalone", diff --git a/angular/src/styles.scss b/angular/src/styles.scss index bac2ba7..d7d2e69 100644 --- a/angular/src/styles.scss +++ b/angular/src/styles.scss @@ -1,15 +1,37 @@ // Сброс стилей html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:middle} article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block} -html{height:100%;color:#000;} +html{height:100%;color:#fff;} body{line-height:1} ol,ul{list-style:none} blockquote,q{quotes:none} blockquote:before,blockquote:after,q:before,q:after{content:'';content:none} table{border-collapse:collapse;border-spacing:0} +// @import url('./app/styles/_fonts.scss'); +@import url('https://fonts.cdnfonts.com/css/gotham-pro'); + + * { - font-family: 'Raleway', sans-serif; + font-family: 'Gotham Pro'; +} + +body { + background-color: #231F20; +} + +:root { + --main-color: #00b26b; + --main-border-radius: 35px; +} + +hr { + width: 100%; + border-top: 1px solid#BDBDBD; +} + +qr-code canvas { + transition: all 0.3s ease 0s; } .p-inputtext { @@ -38,11 +60,11 @@ button { .p-toast-message-custom { background-color: #fff; - border: solid #09467F; + border: solid var(--main-color); border-width: 0 0 0 6px; color: #000; .p-toast-icon-close { - color: #09467F; + color: var(--main-color); } } @@ -64,3 +86,6 @@ button { input::-webkit-date-and-time-value { text-align: left; } + +html, body { height: 100%; } +body { margin: 0; }