| @@ -1 +1,22 @@ | |||
| <p>schedules works!</p> | |||
| <div class="calendar-holder"> | |||
| <div class="widget-heading-holder"> | |||
| <header> Shop Events & Timings </header> | |||
| </div> | |||
| <section class="calendar"> | |||
| <div class="month"> | |||
| <span>{{ selectedMonth }} {{ selectedYear }}</span> | |||
| </div> | |||
| <div class="days"> | |||
| <span> Sun </span><span> Mon </span><span> Tue </span><span> Wed </span> | |||
| <span> Thu </span><span> Fri </span><span> Sat </span> | |||
| </div> | |||
| <div class="dates"> | |||
| <span class="non-current-date" *ngFor="let preceedingDay of preceedingDays"> {{ preceedingDay }} </span> | |||
| <span [ngClass]="{'active' : selectedDate === selectedMonthDay }" *ngFor="let selectedMonthDay of selectedMonthDays" (click)="selectedDate = selectedMonthDay; filterEvents()"> {{ selectedMonthDay }} | |||
| </span> | |||
| <span class="non-current-date" *ngFor="let succeedingDay of succeedingDays"> {{ succeedingDay }} </span> | |||
| </div> | |||
| </section> | |||
| </div> | |||
| @@ -0,0 +1,125 @@ | |||
| .calendar-holder { | |||
| width: 65%; | |||
| padding: 0 5%; | |||
| .widget-heading-holder { | |||
| width: 100%; | |||
| } | |||
| } | |||
| .calendar { | |||
| box-shadow: 0 0 10px -1px #bcbcbc; | |||
| padding: 15px 0; | |||
| background-color: white; | |||
| width: 100%; | |||
| border-radius: 10px; | |||
| margin-top: 30px; | |||
| .month { | |||
| text-align: center; | |||
| padding: 5px 0 20px; | |||
| button, | |||
| span { | |||
| vertical-align: middle; | |||
| } | |||
| button { | |||
| --padding-start: 0; | |||
| --padding-end: 0; | |||
| } | |||
| i { | |||
| color: var(--ion-color-lighter-grey); | |||
| font-size: 22px; | |||
| } | |||
| span { | |||
| color: var(--ion-color-blue); | |||
| text-transform: uppercase; | |||
| font-size: 18px; | |||
| padding: 0 5px; | |||
| display: inline-block; | |||
| width: 180px; | |||
| } | |||
| } | |||
| .days { | |||
| display: flex; | |||
| width: 100%; | |||
| margin: 5px 0; | |||
| span { | |||
| width: calc(100% / 7); | |||
| text-align: center; | |||
| font-size: 14px; | |||
| color: var(--ion-color-brand-black); | |||
| &:first-child { | |||
| color: #f05525; | |||
| } | |||
| } | |||
| } | |||
| .dates { | |||
| display: flex; | |||
| width: 100%; | |||
| flex-wrap: wrap; | |||
| span { | |||
| margin: 15px 0; | |||
| font-size: 14px; | |||
| width: calc(100% / 7); | |||
| text-align: center; | |||
| color: var(--ion-color-brand-black); | |||
| position: relative; | |||
| &::before { | |||
| content: ''; | |||
| position: absolute; | |||
| left: 0; | |||
| top: -70%; | |||
| overflow: visible; | |||
| width: 100%; | |||
| height: 52px; | |||
| box-shadow: none; | |||
| border-radius: 50%; | |||
| transform: scale(0.8); | |||
| } | |||
| &::after { | |||
| content: ''; | |||
| position: absolute; | |||
| left: 46%; | |||
| bottom: -5px; | |||
| width: 5px; | |||
| height: 5px; | |||
| border-radius: 50%; | |||
| overflow: hidden; | |||
| background-color: var(--ion-color-lighter-grey); | |||
| display: none; | |||
| } | |||
| &.active { | |||
| &::before { | |||
| box-shadow: 0 0 5px -1px var(--ion-color-light-grey); | |||
| } | |||
| } | |||
| &.taken { | |||
| &::after { | |||
| display: block; | |||
| } | |||
| } | |||
| &:nth-child(7n + 1) { | |||
| color: #f05525; | |||
| } | |||
| &.non-current-date { | |||
| color: var(--ion-color-lighter-grey); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,15 +1,84 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-schedules', | |||
| templateUrl: './schedules.component.html', | |||
| styleUrls: ['./schedules.component.scss'] | |||
| selector: 'app-schedules', | |||
| templateUrl: './schedules.component.html', | |||
| styleUrls: ['./schedules.component.scss'] | |||
| }) | |||
| export class SchedulesComponent implements OnInit { | |||
| selectedDate: number; | |||
| selectedMonth: string; | |||
| selectedYear: number; | |||
| dayMap: Array<string> = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; | |||
| monthMap: Array<string> = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; | |||
| preceedingDays: Array<number> = []; | |||
| succeedingDays: Array<number> = []; | |||
| selectedMonthDays: Array<number> = []; | |||
| constructor() { } | |||
| constructor() { } | |||
| ngOnInit() { | |||
| } | |||
| ngOnInit() { | |||
| this.selectedMonth = this.monthMap[(new Date()).getMonth()]; | |||
| this.selectedYear = (new Date()).getFullYear(); | |||
| this.selectedDate = new Date().getDate(); | |||
| this.renderCalendar(); | |||
| } | |||
| renderCalendar() { | |||
| // Generate dates for the calendar | |||
| let i = 1, | |||
| no_of_preceeding_days, | |||
| no_of_days_in_selected_month, | |||
| no_of_succeeding_days, | |||
| last_date_of_previous_month, | |||
| first_date_of_selected_month, | |||
| last_date_of_selected_month; | |||
| first_date_of_selected_month = new Date(this.selectedYear, this.monthMap.indexOf(this.selectedMonth), 1); | |||
| // Add one month, and subtract one day to the selected month and year | |||
| last_date_of_selected_month = new Date(this.selectedYear, this.monthMap.indexOf(this.selectedMonth) + 1, 0); | |||
| last_date_of_previous_month = new Date(this.selectedYear, this.monthMap.indexOf(this.selectedMonth), 0); | |||
| no_of_preceeding_days = first_date_of_selected_month.getDay(); | |||
| no_of_days_in_selected_month = last_date_of_selected_month.getDate(); | |||
| no_of_succeeding_days = 6 - last_date_of_selected_month.getDay(); | |||
| this.preceedingDays = []; | |||
| this.selectedMonthDays = []; | |||
| this.succeedingDays = []; | |||
| for (i = no_of_preceeding_days - 1; i >= 0; i -= 1) { | |||
| this.preceedingDays.push(last_date_of_previous_month.getDate() - i); | |||
| } | |||
| for (i = 1; i <= no_of_days_in_selected_month; i += 1) { | |||
| this.selectedMonthDays.push(i); | |||
| } | |||
| for (i = 1; i <= no_of_succeeding_days; i += 1) { | |||
| this.succeedingDays.push(i); | |||
| } | |||
| } | |||
| selectNextMonth() { | |||
| let next_month_index = (this.monthMap.indexOf(this.selectedMonth) + 1) % this.monthMap.length; | |||
| this.selectedMonth = this.monthMap[next_month_index]; | |||
| if (next_month_index == 0) { | |||
| this.selectedYear += 1; | |||
| } | |||
| this.renderCalendar(); | |||
| } | |||
| selectPreviousMonth() { | |||
| let previous_month_index = (this.monthMap.indexOf(this.selectedMonth) + (this.monthMap.length - 1)) % this.monthMap.length; | |||
| this.selectedMonth = this.monthMap[previous_month_index]; | |||
| if (previous_month_index == (this.monthMap.length - 1)) { | |||
| this.selectedYear -= 1; | |||
| } | |||
| this.renderCalendar(); | |||
| } | |||
| } | |||
| @@ -15,7 +15,7 @@ | |||
| <img> | |||
| <div class="name"> John Doe </div> | |||
| <div class="other-info"> Member ID: 03293 </div> | |||
| <div class="other-info"> Restaurant Rating: 4.0 </div> | |||
| <div class="other-info"> Restaurant Rating: <i class="icon ion-ios-star"></i> 4.0 </div> | |||
| </section> | |||
| <ul> | |||
| @@ -44,5 +44,6 @@ | |||
| <app-dashboard *ngIf="selected_nav === 'dashboard'"></app-dashboard> | |||
| <app-orders *ngIf="selected_nav === 'orders'"></app-orders> | |||
| <app-menu-items *ngIf="selected_nav === 'items'"></app-menu-items> | |||
| <app-schedules *ngIf="selected_nav === 'schedule'"></app-schedules> | |||
| </section> | |||
| </div> | |||
| @@ -6,7 +6,7 @@ import { Component, OnInit } from '@angular/core'; | |||
| styleUrls: ['./widgets-holder.component.scss'] | |||
| }) | |||
| export class WidgetsHolderComponent implements OnInit { | |||
| selected_nav: string = 'items'; | |||
| selected_nav: string = 'schedule'; | |||
| constructor() { } | |||