| @@ -9,6 +9,7 @@ const routes: Routes = [ | |||||
| { path: 'mall-details', loadChildren: './mall-details/mall-details.module#MallDetailsPageModule' }, | { path: 'mall-details', loadChildren: './mall-details/mall-details.module#MallDetailsPageModule' }, | ||||
| { path: 'outlet-details', loadChildren: './outlet-details/outlet-details.module#OutletDetailsPageModule' }, | { path: 'outlet-details', loadChildren: './outlet-details/outlet-details.module#OutletDetailsPageModule' }, | ||||
| { path: 'cart', loadChildren: './cart/cart.module#CartPageModule' }, | { path: 'cart', loadChildren: './cart/cart.module#CartPageModule' }, | ||||
| { path: 'profile', loadChildren: './profile/profile.module#ProfilePageModule' }, | |||||
| ]; | ]; | ||||
| @NgModule({ | @NgModule({ | ||||
| @@ -15,18 +15,23 @@ | |||||
| <div class="menu-items-holder" [ngClass]="{'active' : show_menu }"> | <div class="menu-items-holder" [ngClass]="{'active' : show_menu }"> | ||||
| <button (click)="navigateTo('malls')"> | <button (click)="navigateTo('malls')"> | ||||
| <ion-icon src="assets/custom/001-house.svg"></ion-icon> | <ion-icon src="assets/custom/001-house.svg"></ion-icon> | ||||
| <span> HOME </span> | |||||
| </button> | </button> | ||||
| <button> | <button> | ||||
| <ion-icon src="assets/custom/002-bookmark.svg"></ion-icon> | <ion-icon src="assets/custom/002-bookmark.svg"></ion-icon> | ||||
| <span> BOOKMARKS </span> | |||||
| </button> | </button> | ||||
| <button (click)="navigateTo('cart')"> | <button (click)="navigateTo('cart')"> | ||||
| <ion-icon src="assets/custom/cart.svg"></ion-icon> | <ion-icon src="assets/custom/cart.svg"></ion-icon> | ||||
| <span> CART </span> | |||||
| </button> | </button> | ||||
| <button> | <button> | ||||
| <ion-icon src="assets/custom/004-map.svg"></ion-icon> | <ion-icon src="assets/custom/004-map.svg"></ion-icon> | ||||
| <span> NEAR </span> | |||||
| </button> | </button> | ||||
| <button> | |||||
| <button (click)="navigateTo('profile')"> | |||||
| <ion-icon src="assets/custom/005-boss.svg"></ion-icon> | <ion-icon src="assets/custom/005-boss.svg"></ion-icon> | ||||
| <span> PROFILE </span> | |||||
| </button> | </button> | ||||
| </div> | </div> | ||||
| </ion-app> | </ion-app> | ||||
| @@ -1,6 +1,147 @@ | |||||
| // App Styles | // App Styles | ||||
| // ---------------------------------------------------------------------------- | // ---------------------------------------------------------------------------- | ||||
| // Put style rules here that you want to apply to the entire application. These | |||||
| // styles are for the entire app and not just one component. Additionally, this | |||||
| // file can hold Sass mixins, functions, and placeholder classes to be imported | |||||
| // and used throughout the application. | |||||
| // Put style rules here that you want to apply to the entire application. These | |||||
| // styles are for the entire app and not just one component. Additionally, this | |||||
| // file can hold Sass mixins, functions, and placeholder classes to be imported | |||||
| // and used throughout the application. | |||||
| .menu-icon-holder { | |||||
| background-color: #005cbe; | |||||
| color: white; | |||||
| position: fixed; | |||||
| top: 0; | |||||
| box-shadow: 0px 0px 5px var(--brand-blue); | |||||
| width: 100px; | |||||
| height: 100px; | |||||
| text-align: center; | |||||
| left: calc((100% - 100px)/2); | |||||
| border-radius: 50%; | |||||
| padding-top: 7px; | |||||
| z-index: 1; | |||||
| transition: transform 0.5s; | |||||
| transform: translateY(calc(100vh - 40px)); | |||||
| opacity: 0.7; | |||||
| &.hide { | |||||
| display: none; | |||||
| } | |||||
| &.inactive { | |||||
| transform: translateY(100vh); | |||||
| } | |||||
| ion-icon { | |||||
| font-size: 30px; | |||||
| } | |||||
| } | |||||
| .close-icon-holder { | |||||
| background-color: white; | |||||
| width: 70%; | |||||
| position: fixed; | |||||
| left: calc((100% - 70%) / 2); | |||||
| height: 100px; | |||||
| border-radius: 50%; | |||||
| color: var(--brand-blue); | |||||
| text-align: center; | |||||
| z-index: 5; | |||||
| bottom: -60px; | |||||
| padding-top: 10px; | |||||
| transition: transform 0.3s; | |||||
| transform: scale(0); | |||||
| &.active { | |||||
| transform: scale(1); | |||||
| } | |||||
| ion-icon { | |||||
| font-size: 25px; | |||||
| } | |||||
| } | |||||
| .menu-items-holder { | |||||
| background-image: url('../assets/custom/background-5.svg'); | |||||
| background-size: cover; | |||||
| background-repeat: no-repeat; | |||||
| background-position: left top; | |||||
| border-radius: 50%; | |||||
| position: fixed; | |||||
| left: calc((100% - 150%) / 2); | |||||
| bottom: -150px; | |||||
| z-index: 4; | |||||
| height: 300px; | |||||
| width: 150%; | |||||
| padding: 20px 30%; | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| align-items: flex-start; | |||||
| transition: transform 0.3s; | |||||
| transform: scale(0); | |||||
| &.active { | |||||
| transform: scale(1); | |||||
| } | |||||
| button { | |||||
| background-color: white; | |||||
| height: 50px; | |||||
| width: 50px; | |||||
| border-radius: 50%; | |||||
| font-size: 20px; | |||||
| position: relative; | |||||
| span { | |||||
| position: absolute; | |||||
| bottom: -15px; | |||||
| text-align: center; | |||||
| display: block; | |||||
| color: white; | |||||
| letter-spacing: 0.5px; | |||||
| font-weight: bold; | |||||
| font-size: 10px; | |||||
| width: 100%; | |||||
| left: 0; | |||||
| text-overflow: ellipsis; | |||||
| overflow: hidden; | |||||
| white-space: nowrap; | |||||
| } | |||||
| &:first-child { | |||||
| transform: translateY(40px); | |||||
| } | |||||
| &:nth-child(2) { | |||||
| transform: translateY(20px); | |||||
| } | |||||
| &:nth-child(3) { | |||||
| transform: translateY(10px); | |||||
| } | |||||
| &:last-child { | |||||
| transform: translateY(40px); | |||||
| } | |||||
| &:nth-child(4) { | |||||
| transform: translateY(20px); | |||||
| } | |||||
| } | |||||
| } | |||||
| .overlay { | |||||
| position: fixed; | |||||
| top: 0; | |||||
| left: 0; | |||||
| height: 100vh; | |||||
| width: 100vw; | |||||
| pointer-events: none; | |||||
| background-color: black; | |||||
| opacity: 0; | |||||
| z-index: 3; | |||||
| transition: opacity 0.5s; | |||||
| &.active { | |||||
| pointer-events: all; | |||||
| opacity: 0.5; | |||||
| } | |||||
| } | |||||
| @@ -6,7 +6,6 @@ import { MallService } from '../services/mall.service'; | |||||
| import { IMall } from '../models/mall'; | import { IMall } from '../models/mall'; | ||||
| import * as moment from 'moment'; | import * as moment from 'moment'; | ||||
| import { Router } from '@angular/router'; | import { Router } from '@angular/router'; | ||||
| import MenuItem from '../models/menu-item'; | |||||
| @Component({ | @Component({ | ||||
| selector: 'app-cart', | selector: 'app-cart', | ||||
| @@ -0,0 +1,26 @@ | |||||
| import { NgModule } from '@angular/core'; | |||||
| import { CommonModule } from '@angular/common'; | |||||
| import { FormsModule } from '@angular/forms'; | |||||
| import { Routes, RouterModule } from '@angular/router'; | |||||
| import { IonicModule } from '@ionic/angular'; | |||||
| import { ProfilePage } from './profile.page'; | |||||
| const routes: Routes = [ | |||||
| { | |||||
| path: '', | |||||
| component: ProfilePage | |||||
| } | |||||
| ]; | |||||
| @NgModule({ | |||||
| imports: [ | |||||
| CommonModule, | |||||
| FormsModule, | |||||
| IonicModule, | |||||
| RouterModule.forChild(routes) | |||||
| ], | |||||
| declarations: [ProfilePage] | |||||
| }) | |||||
| export class ProfilePageModule {} | |||||
| @@ -0,0 +1,30 @@ | |||||
| <ion-content> | |||||
| <div class="header-bar"> | |||||
| <div class="heading-holder"> | |||||
| <button (click)="back()"> <ion-icon name="arrow-back"></ion-icon> </button> | |||||
| <h3> Profile </h3> | |||||
| </div> | |||||
| </div> | |||||
| <section class="profile"> | |||||
| <div class="profile-details-holder"> | |||||
| <figure class="profile-image"> | |||||
| </figure> | |||||
| <div class="content"> | |||||
| <h2> Mr. Christian Carry | |||||
| <ion-button fill="clear" color="light" size="small"> Edit </ion-button> | |||||
| </h2> | |||||
| <ul class="contact"> | |||||
| <li> +91 0909239302 </li> | |||||
| <li> christian.carry22232@gmail.com </li> | |||||
| </ul> | |||||
| </div> | |||||
| </div> | |||||
| <div class="location-details"> | |||||
| <div class="location"> Nagarbhavi, Bengaluru KA </div> | |||||
| <button> <ion-icon name="locate"></ion-icon> </button> | |||||
| </div> | |||||
| </section> | |||||
| </ion-content> | |||||
| @@ -0,0 +1,55 @@ | |||||
| .header-bar { | |||||
| background-image: url('../../assets/custom/background-5.svg'); | |||||
| background-size: cover; | |||||
| background-repeat: no-repeat; | |||||
| background-position: left top; | |||||
| display: flex; | |||||
| align-items: center; | |||||
| justify-content: space-between; | |||||
| padding: 15px; | |||||
| height: 75px; | |||||
| z-index: 3; | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| position: sticky; | |||||
| .heading-holder { | |||||
| display: flex; | |||||
| align-items: center; | |||||
| } | |||||
| button, a { | |||||
| background-color: white; | |||||
| color: var(--brand-blue); | |||||
| font-size: 18px; | |||||
| padding: 5px; | |||||
| border-radius: 50%; | |||||
| height: 30px; | |||||
| width: 30px; | |||||
| display: flex; | |||||
| justify-content: center; | |||||
| align-items: center; | |||||
| &.active { | |||||
| color: white; | |||||
| background-color: var(--brand-blue); | |||||
| } | |||||
| } | |||||
| h3 { | |||||
| font-size: 16px; | |||||
| color: white; | |||||
| letter-spacing: 0.5px; | |||||
| margin-left: 10px; | |||||
| font-weight: 600; | |||||
| } | |||||
| } | |||||
| .profile { | |||||
| background-image: url('../../assets/custom/background-5.svg'); | |||||
| background-size: cover; | |||||
| background-repeat: no-repeat; | |||||
| background-position: left top; | |||||
| color: white; | |||||
| } | |||||
| @@ -0,0 +1,27 @@ | |||||
| import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; | |||||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||||
| import { ProfilePage } from './profile.page'; | |||||
| describe('ProfilePage', () => { | |||||
| let component: ProfilePage; | |||||
| let fixture: ComponentFixture<ProfilePage>; | |||||
| beforeEach(async(() => { | |||||
| TestBed.configureTestingModule({ | |||||
| declarations: [ ProfilePage ], | |||||
| schemas: [CUSTOM_ELEMENTS_SCHEMA], | |||||
| }) | |||||
| .compileComponents(); | |||||
| })); | |||||
| beforeEach(() => { | |||||
| fixture = TestBed.createComponent(ProfilePage); | |||||
| component = fixture.componentInstance; | |||||
| fixture.detectChanges(); | |||||
| }); | |||||
| it('should create', () => { | |||||
| expect(component).toBeTruthy(); | |||||
| }); | |||||
| }); | |||||
| @@ -0,0 +1,22 @@ | |||||
| import { Component, OnInit } from '@angular/core'; | |||||
| import { Location } from '@angular/common'; | |||||
| @Component({ | |||||
| selector: 'app-profile', | |||||
| templateUrl: './profile.page.html', | |||||
| styleUrls: ['./profile.page.scss'], | |||||
| }) | |||||
| export class ProfilePage implements OnInit { | |||||
| constructor( | |||||
| private location: Location | |||||
| ) { } | |||||
| ngOnInit() { | |||||
| } | |||||
| back() { | |||||
| this.location.back(); | |||||
| } | |||||
| } | |||||
| @@ -40,138 +40,11 @@ figure { | |||||
| margin: 0; | margin: 0; | ||||
| } | } | ||||
| header, h1, h2, h3, h4, h5 { | |||||
| * { | |||||
| font-family: 'M PLUS Rounded 1c', sans-serif; | font-family: 'M PLUS Rounded 1c', sans-serif; | ||||
| margin: 0; | margin: 0; | ||||
| } | } | ||||
| // Hamburger menu | |||||
| .menu-icon-holder { | |||||
| background-color: #005cbe; | |||||
| color: white; | |||||
| position: fixed; | |||||
| bottom: -60px; | |||||
| box-shadow: 0px 0px 5px var(--brand-blue); | |||||
| width: 100px; | |||||
| height: 100px; | |||||
| text-align: center; | |||||
| left: calc((100% - 100px)/2); | |||||
| border-radius: 50%; | |||||
| padding-top: 7px; | |||||
| z-index: 1; | |||||
| transition: transform 0.5s; | |||||
| transform: translateY(0); | |||||
| opacity: 0.7; | |||||
| &.hide { | |||||
| display: none; | |||||
| } | |||||
| &.inactive { | |||||
| transform: translateY(100px); | |||||
| } | |||||
| ion-icon { | |||||
| font-size: 30px; | |||||
| } | |||||
| } | |||||
| .close-icon-holder { | |||||
| background-color: white; | |||||
| width: 70%; | |||||
| position: fixed; | |||||
| left: calc((100% - 70%) / 2); | |||||
| height: 100px; | |||||
| border-radius: 50%; | |||||
| color: var(--brand-blue); | |||||
| text-align: center; | |||||
| z-index: 5; | |||||
| bottom: -60px; | |||||
| padding-top: 10px; | |||||
| transition: transform 0.3s; | |||||
| transform: scale(0); | |||||
| &.active { | |||||
| transform: scale(1); | |||||
| } | |||||
| ion-icon { | |||||
| font-size: 25px; | |||||
| } | |||||
| } | |||||
| .menu-items-holder { | |||||
| background-image: url('assets/custom/background-5.svg'); | |||||
| background-size: cover; | |||||
| background-repeat: no-repeat; | |||||
| background-position: left top; | |||||
| border-radius: 50%; | |||||
| position: fixed; | |||||
| left: calc((100% - 150%) / 2); | |||||
| bottom: -150px; | |||||
| z-index: 4; | |||||
| height: 300px; | |||||
| width: 150%; | |||||
| padding: 20px 30%; | |||||
| display: flex; | |||||
| justify-content: space-between; | |||||
| align-items: flex-start; | |||||
| transition: transform 0.3s; | |||||
| transform: scale(0); | |||||
| &.active { | |||||
| transform: scale(1); | |||||
| } | |||||
| button { | |||||
| background-color: white; | |||||
| height: 50px; | |||||
| width: 50px; | |||||
| border-radius: 50%; | |||||
| font-size: 20px; | |||||
| position: relative; | |||||
| &:first-child { | |||||
| transform: translateY(40px); | |||||
| } | |||||
| &:nth-child(2) { | |||||
| transform: translateY(20px); | |||||
| } | |||||
| &:nth-child(3) { | |||||
| transform: translateY(10px); | |||||
| } | |||||
| &:last-child { | |||||
| transform: translateY(40px); | |||||
| } | |||||
| &:nth-child(4) { | |||||
| transform: translateY(20px); | |||||
| } | |||||
| } | |||||
| } | |||||
| .overlay { | |||||
| position: fixed; | |||||
| top: 0; | |||||
| left: 0; | |||||
| height: 100vh; | |||||
| width: 100vw; | |||||
| pointer-events: none; | |||||
| background-color: black; | |||||
| opacity: 0; | |||||
| z-index: 3; | |||||
| transition: opacity 0.5s; | |||||
| &.active { | |||||
| pointer-events: all; | |||||
| opacity: 0.5; | |||||
| } | |||||
| } | |||||
| .results-utilities-holder { | .results-utilities-holder { | ||||
| display: flex; | display: flex; | ||||
| width: 100%; | width: 100%; | ||||
| @@ -18,7 +18,7 @@ | |||||
| <meta name="apple-mobile-web-app-status-bar-style" content="black"/> | <meta name="apple-mobile-web-app-status-bar-style" content="black"/> | ||||
| <link rel="manifest" href="manifest.webmanifest"> | <link rel="manifest" href="manifest.webmanifest"> | ||||
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"> | <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap"> | ||||
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=M+PLUS+Rounded+1c:400&display=swap"> | |||||
| <link href="https://fonts.googleapis.com/css?family=M+PLUS+Rounded+1c:400,500,700&display=swap" rel="stylesheet"> | |||||
| <meta name="theme-color" content="#1976d2"> | <meta name="theme-color" content="#1976d2"> | ||||
| </head> | </head> | ||||