UNPKG

awaken-direct-democracy

Version:

This is the functional skeleton / working mock up of a disruptive app to increase voter turnout and participation driven at the start by just one person - Tom Atkinson in New Zealand - after watching in horror the signing of the TPPA in Auckland February

148 lines (124 loc) 4.25 kB
import { Component, ViewChild } from '@angular/core'; import { AlertController, App, ItemSliding, List, ModalController, NavController } from 'ionic-angular'; /* To learn how to use third party libs in an Awaken Direct Democracy check out our docs here: http://ionicframework.com/docs/v2/resources/third-party-libs/ */ import moment from 'moment'; import { ConferenceData } from '../../providers/conference-data'; import { ScheduleFilterPage } from '../schedule-filter/schedule-filter'; import { SessionDetailPage } from '../session-detail/session-detail'; import { UserData } from '../../providers/user-data'; @Component({ selector: 'page-schedule', templateUrl: 'schedule.html' }) export class SchedulePage { // the list is a child of the schedule page // @ViewChild('scheduleList') gets a reference to the list // with the variable #scheduleList, `read: List` tells it to return // the List and not a reference to the element @ViewChild('scheduleList', {read: List}) scheduleList: List; dayIndex = 0; queryText = ''; segment = 'all'; excludeTracks = []; shownSessions: any = []; groups = []; confDate: string; constructor( public alertCtrl: AlertController, public app: App, public modalCtrl: ModalController, public navCtrl: NavController, public confData: ConferenceData, public user: UserData ) { } ionViewDidEnter() { this.app.setTitle('Schedule'); } ngAfterViewInit() { this.updateSchedule(); } updateSchedule() { // Close any open sliding items when the schedule updates this.scheduleList && this.scheduleList.closeSlidingItems(); this.confData.getTimeline(this.dayIndex, this.queryText, this.excludeTracks, this.segment).then(data => { let timestamp = data.date; /* To learn how to use third party libs in an Awaken Direct Democracy check out our docs here: http://ionicframework.com/docs/v2/resources/third-party-libs/ */ this.confDate = moment(timestamp).format('MM/DD/YYYY'); this.shownSessions = data.shownSessions; this.groups = data.groups; }); } presentFilter() { let modal = this.modalCtrl.create(ScheduleFilterPage, this.excludeTracks); modal.present(); modal.onDidDismiss((data: any[]) => { if (data) { this.excludeTracks = data; this.updateSchedule(); } }); } goToSessionDetail(sessionData) { // go to the session detail page // and pass in the session data this.navCtrl.push(SessionDetailPage, sessionData); } addFavorite(slidingItem: ItemSliding, sessionData) { if (this.user.hasFavorite(sessionData.name)) { // woops, they already favorited it! What shall we do!? // prompt them to remove it this.removeFavorite(slidingItem, sessionData, 'Favorite already added'); } else { // remember this session as a user favorite this.user.addFavorite(sessionData.name); // create an alert instance let alert = this.alertCtrl.create({ title: 'Favorite Added', buttons: [{ text: 'OK', handler: () => { // close the sliding item slidingItem.close(); } }] }); // now present the alert on top of all other content alert.present(); } } removeFavorite(slidingItem: ItemSliding, sessionData, title) { let alert = this.alertCtrl.create({ title: title, message: 'Would you like to remove this session from your favorites?', buttons: [ { text: 'Cancel', handler: () => { // they clicked the cancel button, do not remove the session // close the sliding item and hide the option buttons slidingItem.close(); } }, { text: 'Remove', handler: () => { // they want to remove this session from their favorites this.user.removeFavorite(sessionData.name); this.updateSchedule(); // close the sliding item and hide the option buttons slidingItem.close(); } } ] }); // now present the alert on top of all other content alert.present(); } }