| @@ -9,6 +9,7 @@ const routes: Routes = [ | |||
| { path: 'mall-details', loadChildren: './mall-details/mall-details.module#MallDetailsPageModule' }, | |||
| { path: 'outlet-details', loadChildren: './outlet-details/outlet-details.module#OutletDetailsPageModule' }, | |||
| { path: 'cart', loadChildren: './cart/cart.module#CartPageModule' }, | |||
| { path: 'profile', loadChildren: './profile/profile.module#ProfilePageModule' }, | |||
| ]; | |||
| @NgModule({ | |||
| @@ -15,18 +15,23 @@ | |||
| <div class="menu-items-holder" [ngClass]="{'active' : show_menu }"> | |||
| <button (click)="navigateTo('malls')"> | |||
| <ion-icon src="assets/custom/001-house.svg"></ion-icon> | |||
| <span> HOME </span> | |||
| </button> | |||
| <button> | |||
| <ion-icon src="assets/custom/002-bookmark.svg"></ion-icon> | |||
| <span> BOOKMARKS </span> | |||
| </button> | |||
| <button (click)="navigateTo('cart')"> | |||
| <ion-icon src="assets/custom/cart.svg"></ion-icon> | |||
| <span> CART </span> | |||
| </button> | |||
| <button> | |||
| <ion-icon src="assets/custom/004-map.svg"></ion-icon> | |||
| <span> NEAR </span> | |||
| </button> | |||
| <button> | |||
| <button (click)="navigateTo('profile')"> | |||
| <ion-icon src="assets/custom/005-boss.svg"></ion-icon> | |||
| <span> PROFILE </span> | |||
| </button> | |||
| </div> | |||
| </ion-app> | |||
| @@ -1,6 +1,147 @@ | |||
| // 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 * as moment from 'moment'; | |||
| import { Router } from '@angular/router'; | |||
| import MenuItem from '../models/menu-item'; | |||
| @Component({ | |||
| 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; | |||
| } | |||
| header, h1, h2, h3, h4, h5 { | |||
| * { | |||
| font-family: 'M PLUS Rounded 1c', sans-serif; | |||
| 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 { | |||
| display: flex; | |||
| width: 100%; | |||
| @@ -18,7 +18,7 @@ | |||
| <meta name="apple-mobile-web-app-status-bar-style" content="black"/> | |||
| <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=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"> | |||
| </head> | |||