| @@ -0,0 +1,115 @@ | |||
| .common_card{ | |||
| position: relative; | |||
| width: 25vw; | |||
| height: 100%; | |||
| border-radius: 10px; | |||
| margin: 10px; | |||
| z-index: 1; | |||
| &:before{ | |||
| content: ''; | |||
| width: 100%; | |||
| height: 100%; | |||
| position: absolute; | |||
| box-shadow: 0 0 10px 1px var(--dark-grey); | |||
| filter: brightness(200%); | |||
| z-index: -1; | |||
| border-radius: 10px; | |||
| } | |||
| } | |||
| .card_header{ | |||
| position: relative; | |||
| width: 100%; | |||
| height: 50px; | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| z-index: 1; | |||
| &:before{ | |||
| content: ''; | |||
| position: absolute; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: var(--grey); | |||
| filter: brightness(150%); | |||
| z-index: -1; | |||
| border-radius: 10px 10px 0 0; | |||
| } | |||
| h4{ | |||
| font-size: 18px; | |||
| color: var(--dark-grey); | |||
| margin: 0 20px; | |||
| } | |||
| button{ | |||
| width: 30px; | |||
| height: 30px; | |||
| padding: 0; | |||
| border-radius: 30px; | |||
| font-weight: 800; | |||
| font-size: 20px; | |||
| margin: 0 20px; | |||
| } | |||
| } | |||
| .card_upfold{ | |||
| overflow: auto; | |||
| list-style: none; | |||
| height: 300px; | |||
| h5{ | |||
| font-size: 16px; | |||
| color: var(--dark-grey); | |||
| padding: 5px 0; | |||
| } | |||
| p{ | |||
| font-size: 14px; | |||
| color: var(--grey); | |||
| padding: 5px 0; | |||
| } | |||
| .cardList{ | |||
| position: relative; | |||
| margin: 20px; | |||
| cursor: pointer; | |||
| z-index: 0; | |||
| &:before{ | |||
| content: ''; | |||
| position: absolute; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: var(--grey); | |||
| filter: brightness(160%); | |||
| z-index: -1; | |||
| transform: scale(105%); | |||
| border-radius: 10px; | |||
| border: 1px solid var(--grey); | |||
| } | |||
| } | |||
| } | |||
| ::-webkit-scrollbar { | |||
| width: 10px; | |||
| border-radius: 10px; | |||
| background: var(--dark-grey); | |||
| } | |||
| ::-webkit-scrollbar-track { | |||
| background: white; | |||
| border-radius: 10px; | |||
| } | |||
| ::-webkit-scrollbar-thumb { | |||
| border-radius: 10px; | |||
| background: var(--grey); | |||
| } | |||
| ::-webkit-scrollbar-thumb:hover { | |||
| border-radius: 10px; | |||
| background: var(--dark-grey); | |||
| } | |||
| @@ -0,0 +1,23 @@ | |||
| <section class="nav-bar"> | |||
| <div class="navmenu"> | |||
| <img src="assets/logo.svg" alt="Logo"> | |||
| <div> | |||
| <header>Name: {{adminInfo.name}}</header> | |||
| <span>Id:{{adminInfo.id}}</span> | |||
| </div> | |||
| </div> | |||
| <nav> | |||
| <button class="rect-button" (click)="logout()"> Logout </button> | |||
| </nav> | |||
| </section> | |||
| <section class="tricards"> | |||
| <app-notificaiton></app-notificaiton> | |||
| <app-queries></app-queries> | |||
| <app-support-tickets></app-support-tickets> | |||
| </section> | |||
| <section class="malls"> | |||
| <app-malls></app-malls> | |||
| </section> | |||
| @@ -0,0 +1,94 @@ | |||
| .nav-bar { | |||
| display: flex; | |||
| width: 100%; | |||
| height: 70px; | |||
| align-items: center; | |||
| justify-content: space-between; | |||
| padding: 0 4%; | |||
| box-shadow: 0px 0px 8px var(--grey); | |||
| position: relative; | |||
| z-index: 1; | |||
| background-color: white; | |||
| @media screen and (max-width: 1023px) { | |||
| display: none; | |||
| } | |||
| header{ | |||
| font-weight: 600; | |||
| color: var(--dark-grey); | |||
| padding-left: 15px; | |||
| } | |||
| .navmenu{ | |||
| display: inline-flex; | |||
| align-items: center; | |||
| } | |||
| span{ | |||
| display: block; | |||
| padding-left: 15px; | |||
| } | |||
| img { | |||
| width: 70px; | |||
| } | |||
| nav { | |||
| height: 70px; | |||
| display: flex; | |||
| align-items: center; | |||
| a, button { | |||
| margin: 0 25px; | |||
| } | |||
| a { | |||
| color: var(--grey); | |||
| font-size: 16px; | |||
| height: 70px; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| position: relative; | |||
| &.active { | |||
| &::before { | |||
| content: ''; | |||
| position: absolute; | |||
| left: 0; | |||
| bottom: 0; | |||
| height: 3px; | |||
| width: 100%; | |||
| background-color: var(--brand-blue); | |||
| } | |||
| } | |||
| } | |||
| button { | |||
| background-color: transparent; | |||
| border: 2px solid var(--brand-blue); | |||
| color: var(--brand-blue); | |||
| width: 100px; | |||
| height: 40px; | |||
| margin-right: 0; | |||
| } | |||
| } | |||
| } | |||
| .tricards{ | |||
| display: grid; | |||
| grid-template-columns: repeat(3,1fr); | |||
| :nth-child(n){ | |||
| margin: 30px; | |||
| } | |||
| } | |||
| .malls{ | |||
| display: grid; | |||
| grid-template-columns: repeat(3, 1fr); | |||
| :nth-child(n){ | |||
| margin: 30px; | |||
| } | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { AdminComponent } from './admin.component'; | |||
| describe('AdminComponent', () => { | |||
| let component: AdminComponent; | |||
| let fixture: ComponentFixture<AdminComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ AdminComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(AdminComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,31 @@ | |||
| import { Component, OnInit, ViewChild } from '@angular/core'; | |||
| import { Router } from '@angular/router'; | |||
| @Component({ | |||
| selector: 'app-admin', | |||
| templateUrl: './admin.component.html', | |||
| styleUrls: ['./admin.component.scss'] | |||
| }) | |||
| export class AdminComponent implements OnInit { | |||
| constructor( | |||
| private router: Router | |||
| ) { | |||
| } | |||
| adminInfo: any = [] | |||
| ngOnInit() { | |||
| this.getAdminInfo() | |||
| } | |||
| getAdminInfo() { | |||
| this.adminInfo = JSON.parse(localStorage.user_info) | |||
| } | |||
| logout() { | |||
| localStorage.clear() | |||
| this.router.navigate(['/']); | |||
| } | |||
| } | |||
| @@ -0,0 +1,64 @@ | |||
| <section class="common_card"> | |||
| <div class="card_header"> | |||
| <h4>Malls</h4> | |||
| <div> | |||
| <input type="text" placeholder="Search Malls" [(ngModel)]="searchTerm" (input)="searchAllMalls()" | |||
| autocomplete="off" #searchbar> | |||
| <button class="rect-button" (click)='showModal = true'>+</button> | |||
| </div> | |||
| </div> | |||
| <div class="card_upfold"> | |||
| <li *ngFor='let malls of allMalls' class="mallList"> | |||
| <img src="{{malls.image_url}}"> | |||
| <div class="upfold-content"> | |||
| <h5> {{malls.mall_name}}</h5> | |||
| <p>{{malls.description}}</p> | |||
| {{showModal}} | |||
| <div> | |||
| <span *ngIf='malls.outlet.length > 0'>Outlets: {{malls.outlet.length}}</span> | |||
| <span *ngIf='malls.outlet.length === 0'>Outlets: 0</span> | |||
| <span> Rating: {{malls.rating}} </span> | |||
| <span> Location: {{malls.mall_address}}</span> | |||
| </div> | |||
| </div> | |||
| </li> | |||
| </div> | |||
| <div class="popUp" *ngIf='showModal === true'> | |||
| <div class="popup-box"> | |||
| <ul class="input-list"> | |||
| <li> | |||
| <label> Advertisement</label> | |||
| <input type="number"> | |||
| </li> | |||
| <li> | |||
| <label> Add Mall </label> | |||
| <input type="number"> | |||
| </li> | |||
| <li> | |||
| <label> Add Mall </label> | |||
| <input type="number"> | |||
| </li> | |||
| <li> | |||
| <label> Add Mall </label> | |||
| <input type="number"> | |||
| </li> | |||
| <li> | |||
| <label> Add Mall </label> | |||
| <input type="number"> | |||
| </li> | |||
| <li> | |||
| <label> Add Mall </label> | |||
| <input type="number"> | |||
| </li> | |||
| </ul> | |||
| <div class="action-buttons"> | |||
| <button class="rect-button cancel" (click)="showModal = false">Cancel</button> | |||
| <button class="rect-button" (click)="addMall()">Add</button> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </section> | |||
| @@ -0,0 +1,169 @@ | |||
| @import '../commonCard'; | |||
| .common_card { | |||
| width: 100%; | |||
| } | |||
| .card_header { | |||
| div { | |||
| display: flex; | |||
| align-items: center; | |||
| input { | |||
| width: 150px; | |||
| height: 32px; | |||
| border: none; | |||
| border-radius: 10px; | |||
| padding: 10px; | |||
| box-shadow: 0 0 3px 0px var(--grey); | |||
| font-weight: 500; | |||
| } | |||
| } | |||
| } | |||
| .mallList { | |||
| display: flex; | |||
| align-items: center; | |||
| position: relative; | |||
| margin: 20px; | |||
| &:before { | |||
| content: ''; | |||
| position: absolute; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: var(--grey); | |||
| filter: brightness(160%); | |||
| z-index: -1; | |||
| border-radius: 10px; | |||
| border: 1px solid var(--grey); | |||
| } | |||
| img { | |||
| width: 100px; | |||
| height: 100px; | |||
| border-radius: 10px; | |||
| } | |||
| .upfold-content { | |||
| padding: 0 10px; | |||
| position: relative; | |||
| p { | |||
| text-overflow: ellipsis; | |||
| white-space: nowrap; | |||
| overflow: hidden; | |||
| width: 300px; | |||
| } | |||
| .rating { | |||
| i { | |||
| color: var(--grey); | |||
| } | |||
| } | |||
| div { | |||
| display: flex; | |||
| align-items: center; | |||
| span { | |||
| margin: 10px 0; | |||
| margin-right: 10px; | |||
| color: var(--grey); | |||
| img { | |||
| width: 10px; | |||
| height: 10px; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .popUp { | |||
| position: fixed; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: rgb(0, 0, 0, 0.5); | |||
| top: 0; | |||
| left: 0; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| z-index: 1; | |||
| .popup-box { | |||
| width: 400px; | |||
| padding: 15px; | |||
| background: white; | |||
| border-radius: 10px; | |||
| .input-list { | |||
| list-style: none; | |||
| padding: 0; | |||
| margin: 10px 0; | |||
| } | |||
| .action-buttons{ | |||
| display: flex; | |||
| justify-content: center; | |||
| } | |||
| button{ | |||
| margin: 0 20px; | |||
| width: 100px; | |||
| text-align: center; | |||
| &.cancel{ | |||
| background-color: white; | |||
| border: 2px solid var(--brand-blue); | |||
| color: var(--brand-blue); | |||
| } | |||
| } | |||
| li { | |||
| text-align: left; | |||
| margin: 20px 0; | |||
| position: relative; | |||
| label { | |||
| display: block; | |||
| font-size: 14px; | |||
| color: dimgrey; | |||
| font-weight: 500; | |||
| } | |||
| img { | |||
| width: 100px; | |||
| height: 100px; | |||
| border-radius: 10px; | |||
| box-shadow: 0px 0px 5px var(--grey); | |||
| margin: 0 auto; | |||
| display: block; | |||
| } | |||
| input { | |||
| width: 100%; | |||
| display: block; | |||
| height: 40px; | |||
| border-radius: 5px; | |||
| border: 2px solid var(--grey); | |||
| margin-top: 10px; | |||
| padding: 0 10px; | |||
| font-size: 16px; | |||
| &:focus { | |||
| border-color: var(--brand-blue); | |||
| } | |||
| } | |||
| .toggle { | |||
| margin: 0; | |||
| margin-top: 10px; | |||
| cursor: pointer; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { MallsComponent } from './malls.component'; | |||
| describe('MallsComponent', () => { | |||
| let component: MallsComponent; | |||
| let fixture: ComponentFixture<MallsComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ MallsComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(MallsComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,121 @@ | |||
| import { Component, ElementRef, OnInit, ViewChild, Input } from '@angular/core'; | |||
| import { MallsService } from '../../services/malls.service' | |||
| @Component({ | |||
| selector: 'app-malls', | |||
| templateUrl: './malls.component.html', | |||
| styleUrls: ['./malls.component.scss'] | |||
| }) | |||
| export class MallsComponent implements OnInit { | |||
| constructor(private mallService: MallsService) { } | |||
| allMalls: any = []; | |||
| allOutlets: any = []; | |||
| searchTerm: any = []; | |||
| tempMalls: any = []; | |||
| showModal: boolean = false; | |||
| newMall: { | |||
| advertisement: { | |||
| adv_type: true, | |||
| createdBy: string, | |||
| createdOn: string, | |||
| image: string, | |||
| soft_delete: true, | |||
| type: string, | |||
| updatedBy: string, | |||
| updatedOn: string, | |||
| }, | |||
| description: string, | |||
| image_url: string, | |||
| is_bookmarked: true, | |||
| mall_address: string, | |||
| mall_distance: number, | |||
| mall_name: string, | |||
| offers_count: number, | |||
| outlet: { | |||
| description: string, | |||
| image_url: string, | |||
| is_bookmarked: true, | |||
| outlet_Gst: 0, | |||
| outlet_id: 0, | |||
| outlet_name: string, | |||
| outlet_timing: string, | |||
| outlet_type: string, | |||
| rating: number, | |||
| }, | |||
| rating: number, | |||
| soft_delete: true | |||
| } = { | |||
| advertisement: { | |||
| adv_type: true, | |||
| createdBy: '', | |||
| createdOn: '', | |||
| image: '', | |||
| soft_delete: true, | |||
| type: '', | |||
| updatedBy: '', | |||
| updatedOn: '', | |||
| }, | |||
| description: '', | |||
| image_url: '', | |||
| is_bookmarked: true, | |||
| mall_address: '', | |||
| mall_distance: 0, | |||
| mall_name: '', | |||
| offers_count: 0, | |||
| outlet: { | |||
| description: '', | |||
| image_url: '', | |||
| is_bookmarked: true, | |||
| outlet_Gst: 0, | |||
| outlet_id: 0, | |||
| outlet_name: '', | |||
| outlet_timing: '', | |||
| outlet_type: '', | |||
| rating: 0, | |||
| }, | |||
| rating: 0, | |||
| soft_delete: true | |||
| } | |||
| @ViewChild('searchbar', null) searchElement: ElementRef; | |||
| ngOnInit() { | |||
| this.getAllMalls() | |||
| } | |||
| getAllMalls() { | |||
| let arrayofMalls: any = []; | |||
| this.mallService.allMalls().then((malls: any) => { | |||
| malls.map(data => { | |||
| arrayofMalls.push(data.mall) | |||
| }) | |||
| this.allMalls = arrayofMalls; | |||
| this.tempMalls = arrayofMalls; | |||
| localStorage.allMalls = JSON.stringify(arrayofMalls) | |||
| console.log(this.allMalls) | |||
| }, (error) => { | |||
| console.log("Error getting Malls", error) | |||
| }) | |||
| } | |||
| searchAllMalls() { | |||
| if (this.searchTerm.trim().length > 0) { | |||
| this.allMalls = this.allMalls.filter((mallData: any) => { | |||
| return mallData.mall_name.toLowerCase().includes(this.searchTerm.toLowerCase()); | |||
| }); | |||
| } else { | |||
| this.allMalls = JSON.parse(localStorage.allMalls); | |||
| } | |||
| } | |||
| addMall() { | |||
| console.log(this.newMall) | |||
| } | |||
| } | |||
| @@ -0,0 +1,12 @@ | |||
| <section class="common_card"> | |||
| <div class="card_header"> | |||
| <h4>Notification</h4> | |||
| <button class="rect-button">+</button> | |||
| </div> | |||
| <div class="card_upfold"> | |||
| <li *ngFor='let notification of notifications' class="cardList"> | |||
| <h5> {{notification.heading}}</h5> | |||
| <p>{{notification.description}}</p> | |||
| </li> | |||
| </div> | |||
| </section> | |||
| @@ -0,0 +1 @@ | |||
| @import '../commonCard' | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { NotificaitonComponent } from './notificaiton.component'; | |||
| describe('NotificaitonComponent', () => { | |||
| let component: NotificaitonComponent; | |||
| let fixture: ComponentFixture<NotificaitonComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ NotificaitonComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(NotificaitonComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,50 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-notificaiton', | |||
| templateUrl: './notificaiton.component.html', | |||
| styleUrls: ['./notificaiton.component.scss'] | |||
| }) | |||
| export class NotificaitonComponent implements OnInit { | |||
| currentDate: any = new Date().getDate() + "-" + new Date().getMonth() + "-" + new Date().getFullYear() | |||
| notifications: Array<{ | |||
| heading: string, | |||
| description: string, | |||
| timeStamp?: any | |||
| }> = [{ | |||
| heading: 'Notification 1', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 2', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 3', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 4', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 5', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 6', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Notification 7', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| },] | |||
| constructor() { } | |||
| ngOnInit() { | |||
| } | |||
| } | |||
| @@ -0,0 +1,12 @@ | |||
| <section class="common_card"> | |||
| <div class="card_header"> | |||
| <h4>Queries</h4> | |||
| <button class="rect-button">+</button> | |||
| </div> | |||
| <div class="card_upfold"> | |||
| <li *ngFor='let querie of queries' class="cardList"> | |||
| <h5> {{querie.heading}}</h5> | |||
| <p>{{querie.description}}</p> | |||
| </li> | |||
| </div> | |||
| </section> | |||
| @@ -0,0 +1 @@ | |||
| @import "../commonCard"; | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { QueriesComponent } from './queries.component'; | |||
| describe('QueriesComponent', () => { | |||
| let component: QueriesComponent; | |||
| let fixture: ComponentFixture<QueriesComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ QueriesComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(QueriesComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,50 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-queries', | |||
| templateUrl: './queries.component.html', | |||
| styleUrls: ['./queries.component.scss'] | |||
| }) | |||
| export class QueriesComponent implements OnInit { | |||
| currentDate: any = new Date().getDate() + "-" + new Date().getMonth() + "-" + new Date().getFullYear() | |||
| queries: Array<{ | |||
| heading: string, | |||
| description: string, | |||
| timeStamp?: any | |||
| }> = [{ | |||
| heading: 'Querie 1', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 2', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 3', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 4', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 5', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 6', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Querie 7', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| },] | |||
| ngOnInit() { | |||
| } | |||
| } | |||
| @@ -0,0 +1,12 @@ | |||
| <section class="common_card"> | |||
| <div class="card_header"> | |||
| <h4>Support Ticket</h4> | |||
| <button class="rect-button">+</button> | |||
| </div> | |||
| <div class="card_upfold"> | |||
| <li *ngFor='let supportTicket of supportTickets' class="cardList"> | |||
| <h5> {{supportTicket.heading}}</h5> | |||
| <p>{{supportTicket.description}}</p> | |||
| </li> | |||
| </div> | |||
| </section> | |||
| @@ -0,0 +1 @@ | |||
| @import '../commonCard' | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { SupportTicketsComponent } from './support-tickets.component'; | |||
| describe('SupportTicketsComponent', () => { | |||
| let component: SupportTicketsComponent; | |||
| let fixture: ComponentFixture<SupportTicketsComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ SupportTicketsComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(SupportTicketsComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,49 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-support-tickets', | |||
| templateUrl: './support-tickets.component.html', | |||
| styleUrls: ['./support-tickets.component.scss'] | |||
| }) | |||
| export class SupportTicketsComponent implements OnInit { | |||
| currentDate: any = new Date().getDate() + "-" + new Date().getMonth() + "-" + new Date().getFullYear() | |||
| supportTickets: Array<{ | |||
| heading: string, | |||
| description: string, | |||
| timeStamp?: any | |||
| }> = [{ | |||
| heading: 'Ticket 1', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 2', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 3', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 4', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 5', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 6', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| }, { | |||
| heading: 'Ticket 7', | |||
| description: "Lorem ipsum dolor sit amet consectetur adipisicing elit", | |||
| timeStamp: this.currentDate, | |||
| },] | |||
| ngOnInit() { | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| import { NgModule } from '@angular/core'; | |||
| import { Routes, RouterModule } from '@angular/router'; | |||
| import { AdminComponent } from './admin/admin.component'; | |||
| import { LoginComponent } from './login/login.component'; | |||
| import { OutletsComponent } from './outlets/outlets.component'; | |||
| import { WidgetsHolderComponent } from './widgets-holder/widgets-holder.component'; | |||
| @@ -24,7 +25,8 @@ const routes: Routes = [{ | |||
| },{ | |||
| path: 'outlets', | |||
| component:OutletsComponent | |||
| } | |||
| },{ path: 'admin', | |||
| component: AdminComponent} | |||
| ]; | |||
| @NgModule({ | |||
| @@ -29,6 +29,11 @@ import { OrderService } from './services/order.service'; | |||
| import { ItemService } from './services/item.service'; | |||
| import { FaqService } from './services/faq.service'; | |||
| import { OutletsComponent } from './outlets/outlets.component'; | |||
| import { AdminComponent } from './admin/admin.component'; | |||
| import { NotificaitonComponent } from './admin/notificaiton/notificaiton.component'; | |||
| import { SupportTicketsComponent } from './admin/support-tickets/support-tickets.component'; | |||
| import { QueriesComponent } from './admin/queries/queries.component'; | |||
| import { MallsComponent } from './admin/malls/malls.component'; | |||
| @NgModule({ | |||
| declarations: [ | |||
| @@ -44,7 +49,12 @@ import { OutletsComponent } from './outlets/outlets.component'; | |||
| SupportComponent, | |||
| SettingsComponent, | |||
| MoreComponent, | |||
| OutletsComponent | |||
| OutletsComponent, | |||
| AdminComponent, | |||
| NotificaitonComponent, | |||
| SupportTicketsComponent, | |||
| QueriesComponent, | |||
| MallsComponent | |||
| ], | |||
| imports: [ | |||
| BrowserModule, | |||
| @@ -9,15 +9,16 @@ import { AuthService } from '../services/auth.service'; | |||
| }) | |||
| export class LoginComponent implements OnInit { | |||
| credentials = { | |||
| username: 'ramsesrh', | |||
| password: '123456789', | |||
| login_type: "ROLE_VENDOR" | |||
| username: 'admin123', | |||
| password: 'admin@123', | |||
| login_type: "ROLE_ADMIN" | |||
| }; | |||
| // ramsesrh suresh | |||
| // ramsesrh suresh | |||
| // admin123 admin@123 | |||
| login_types = ['ROLE_VENDOR', 'ROLE_OUTLET']; | |||
| login_types = ['ROLE_VENDOR', 'ROLE_OUTLET', 'ROLE_ADMIN']; | |||
| errorMessage: string = ''; | |||
| @@ -40,6 +41,8 @@ export class LoginComponent implements OnInit { | |||
| if (this.credentials.login_type === 'ROLE_VENDOR') { | |||
| localStorage.vendor_info = JSON.stringify(data['Info Info']); | |||
| } if (this.credentials.login_type === 'ROLE_ADMIN') { | |||
| localStorage.admin_info = JSON.stringify(data['Admin Info']) | |||
| } else { | |||
| localStorage.outlet_info = JSON.stringify(data['Outlet Info']); | |||
| this.router.navigate(['shop-details']); | |||
| @@ -48,11 +51,14 @@ export class LoginComponent implements OnInit { | |||
| if (this.credentials.login_type === 'ROLE_VENDOR') { | |||
| console.log("Logging as Vendor") | |||
| this.router.navigate(['/outlets']); | |||
| }else{ | |||
| } if (this.credentials.login_type === 'ROLE_ADMIN') { | |||
| console.log("Logging as Admin") | |||
| this.router.navigate(['/admin']); | |||
| } else { | |||
| console.log("Logging as Outlet") | |||
| this.router.navigate(['shop-details']); | |||
| } | |||
| }, (err: any) => { | |||
| this.errorMessage = 'Please check your credentials'; | |||
| setTimeout(() => { | |||
| @@ -0,0 +1,12 @@ | |||
| import { TestBed } from '@angular/core/testing'; | |||
| import { MallsService } from './malls.service'; | |||
| describe('MallsService', () => { | |||
| beforeEach(() => TestBed.configureTestingModule({})); | |||
| it('should be created', () => { | |||
| const service: MallsService = TestBed.get(MallsService); | |||
| expect(service).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,38 @@ | |||
| import { Injectable } from '@angular/core'; | |||
| import { URL } from '../data/url'; | |||
| import { HttpClient, HttpHeaders } from '@angular/common/http'; | |||
| @Injectable({ | |||
| providedIn: 'root' | |||
| }) | |||
| export class MallsService { | |||
| constructor( | |||
| private http: HttpClient | |||
| ) { } | |||
| async allMalls() { | |||
| const httpOptions = { | |||
| headers: new HttpHeaders({ | |||
| 'Access-Control-Allow-Origin': '*', | |||
| 'Content-Type': 'application/json', | |||
| 'Authorization': 'Bearer ' + localStorage.token | |||
| }) | |||
| }; | |||
| return await this.http.get(URL + '/api/maioraservice/mall/getallmalls', httpOptions).toPromise(); | |||
| } | |||
| async mallsByLocation(latitude: number, longitude: number) { | |||
| const httpOptions = { | |||
| headers: new HttpHeaders({ | |||
| 'Access-Control-Allow-Origin': '*', | |||
| 'Content-Type': 'application/json', | |||
| 'Authorization': 'Bearer ' + localStorage.access_Token | |||
| }) | |||
| }; | |||
| return await this.http.get(URL + '/api/maioraservice/mall/v1/latitude/' + latitude + '/longitude/' + longitude + '/check/', httpOptions).toPromise(); | |||
| } | |||
| } | |||
| @@ -0,0 +1 @@ | |||
| <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#9a9a9a"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M17.27 6.73l-4.24 10.13-1.32-3.42-.32-.83-.82-.32-3.43-1.33 10.13-4.23M21 3L3 10.53v.98l6.84 2.65L12.48 21h.98L21 3z"/></svg> | |||