{"version":3,"file":"main.js","mappings":"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","sources":["./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.module.ts","./src/app/login.component.ts","./src/app/selective-preloading-strategy.ts","./src/app/shared/auth-interceptor.ts","./src/app/shared/components/address/address.component.ts","./src/app/shared/components/approved-addresses/approved-addresses.component.ts","./src/app/shared/components/campus-unit-message-display/campus-unit-message-display.component.ts","./src/app/shared/components/campus-unit-message/campus-unit-message-edit-dialog/campus-unit-message-edit-dialog.component.ts","./src/app/shared/components/campus-unit-message/campus-unit-message.component.ts","./src/app/shared/components/campus-unit-select/campus-unit-select.component.ts","./src/app/shared/components/content-or-error/content-or-error.component.ts","./src/app/shared/components/empty-response-recieved/empty-response-recieved.component.ts","./src/app/shared/components/home-page/home-page.component.ts","./src/app/shared/components/index.ts","./src/app/shared/components/loading/loading.component.ts","./src/app/shared/components/local-ward-select/local-ward-select.component.ts","./src/app/shared/components/navigation-drawer/navigation-drawer.component.ts","./src/app/shared/components/not-found.component.ts","./src/app/shared/components/toolbar/toolbar.component.ts","./src/app/shared/components/unauthorized.component.ts","./src/app/shared/components/ward-complexes/ward-complexes.component.ts","./src/app/shared/dialogs/confirm-dialog/confirm.dialog.ts","./src/app/shared/dialogs/index.ts","./src/app/shared/dialogs/message-dialog/message.dialog.ts","./src/app/shared/dialogs/select-church-unit-dialog/select-church-unit.dialog.ts","./src/app/shared/directives/authorize.directive.ts","./src/app/shared/directives/index.ts","./src/app/shared/guards/authorize.guard.ts","./src/app/shared/guards/has-changes.guard.ts","./src/app/shared/guards/index.ts","./src/app/shared/guards/leader.guard.ts","./src/app/shared/guards/unit-admin.guard.ts","./src/app/shared/index.ts","./src/app/shared/models/communications/campus-units-faq-section.model.ts","./src/app/shared/models/communications/campus-units-faq.model.ts","./src/app/shared/models/ecclesiastical/campus-stake-details-for-update.model.ts","./src/app/shared/models/ecclesiastical/campus-stake-details.model.ts","./src/app/shared/models/ecclesiastical/campus-stake.model.ts","./src/app/shared/models/ecclesiastical/campus-unit-access.model.ts","./src/app/shared/models/ecclesiastical/campus-unit.model.ts","./src/app/shared/models/ecclesiastical/campus-units.model.ts","./src/app/shared/models/ecclesiastical/campus-ward-details-for-update.model.ts","./src/app/shared/models/ecclesiastical/campus-ward-details.model.ts","./src/app/shared/models/ecclesiastical/campus-ward.model.ts","./src/app/shared/models/ecclesiastical/church-unit.model.ts","./src/app/shared/models/ecclesiastical/home-ward-with-students.model.ts","./src/app/shared/models/ecclesiastical/local-ward-assignment.model.ts","./src/app/shared/models/ecclesiastical/local-ward.model.ts","./src/app/shared/models/ecclesiastical/meeting-type.model.ts","./src/app/shared/models/ecclesiastical/member-info.model.ts","./src/app/shared/models/ecclesiastical/new-local-ward.model.ts","./src/app/shared/models/ecclesiastical/sortable-church-unit.model.ts","./src/app/shared/models/ecclesiastical/stake-leader.model.ts","./src/app/shared/models/ecclesiastical/stake-position.enum.ts","./src/app/shared/models/ecclesiastical/unit-leader.model.ts","./src/app/shared/models/ecclesiastical/unit-type.enum.ts","./src/app/shared/models/ecclesiastical/ward-directory-parameters.model.ts","./src/app/shared/models/ecclesiastical/ward-group-assignment.model.ts","./src/app/shared/models/ecclesiastical/ward-group-assignments.model.ts","./src/app/shared/models/ecclesiastical/ward-group-type.model.ts","./src/app/shared/models/ecclesiastical/ward-group.model.ts","./src/app/shared/models/ecclesiastical/ward-leader.model.ts","./src/app/shared/models/ecclesiastical/ward-meeting.model.ts","./src/app/shared/models/ecclesiastical/ward-position.enum.ts","./src/app/shared/models/housing/address-ward-assignment.model.ts","./src/app/shared/models/housing/approved-address.model.ts","./src/app/shared/models/housing/approved-housing-complex.model.ts","./src/app/shared/models/housing/approved-housing-session-information.model.ts","./src/app/shared/models/housing/campus-ward-session-information.model.ts","./src/app/shared/models/housing/selectable-approved-housing-session-information.model.ts","./src/app/shared/models/housing/selectable-campus-ward-session-information.model.ts","./src/app/shared/models/index.ts","./src/app/shared/models/notifications/campus-unit-message.model.ts","./src/app/shared/models/students/home-unit-change.model.ts","./src/app/shared/models/students/student-listing.model.ts","./src/app/shared/models/students/student.model.ts","./src/app/shared/models/util/academic-session.model.ts","./src/app/shared/models/util/address.model.ts","./src/app/shared/models/util/config.model.ts","./src/app/shared/models/util/refresh.model.ts","./src/app/shared/models/util/unit-login-result.model.ts","./src/app/shared/models/util/user.model.ts","./src/app/shared/pipes/church-unit.pipe.ts","./src/app/shared/pipes/email.pipe.ts","./src/app/shared/pipes/index.ts","./src/app/shared/pipes/middle-ellipsis.pipe.ts","./src/app/shared/pipes/mission-name.pipe.ts","./src/app/shared/pipes/phone-number.pipe.ts","./src/app/shared/pipes/sort.pipe.ts","./src/app/shared/pipes/student-listing.pipe.ts","./src/app/shared/services/config.service.ts","./src/app/shared/services/data/abstract-data-service.ts","./src/app/shared/services/data/campus-units-communications-data.service.ts","./src/app/shared/services/data/campus-units-message.service.ts","./src/app/shared/services/data/campus-wards-data.service.ts","./src/app/shared/services/data/church-units-data.service.ts","./src/app/shared/services/data/housing-data.service.ts","./src/app/shared/services/data/students-data.service.ts","./src/app/shared/services/email.service.ts","./src/app/shared/services/index.ts","./src/app/shared/services/navigation.service.ts","./src/app/shared/services/sort.service.ts","./src/app/shared/services/user.service.ts","./src/app/shared/shared.module.ts","./src/app/shared/tokens/constants.tokens.ts","./src/app/shared/tokens/roles.tokens.ts","./src/app/shared/validators/form.validator.ts","./src/app/unit-information/index.ts","./src/app/unit-information/lookup/campus-unit-selection/campus-unit-selection.component.ts","./src/app/unit-information/lookup/housing-complex-selection/housing-complex-selection.component.ts","./src/app/unit-information/lookup/local-ward-selection/local-ward-selection.component.ts","./src/app/unit-information/lookup/lookup.component.ts","./src/app/unit-information/stake-information/stake-information.component.ts","./src/app/unit-information/unit-information-routing.module.ts","./src/app/unit-information/unit-information.module.ts","./src/app/unit-information/unit-leader/unit-leader.component.ts","./src/app/unit-information/unit-login/unit-login.component.ts","./src/app/unit-information/ward-information/ward-information.component.ts","./src/environments/environment.ts","./src/main.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport {\r\n NotFoundComponent,\r\n UnauthorizedComponent,\r\n AuthorizeGuard,\r\n LeaderGuard,\r\n UnitAdminGuard,\r\n CampusUnitMessageComponent\r\n} from './shared';\r\nimport * as Security from './shared/tokens/roles.tokens';\r\nimport { LoginComponent } from './login.component';\r\nimport { SelectivePreloadingStrategy } from './selective-preloading-strategy';\r\nimport { UnitLoginComponent } from './unit-information/unit-login/unit-login.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'unauthorized',\r\n component: UnauthorizedComponent,\r\n data: { title: 'Access denied' }\r\n },\r\n {\r\n path: 'login',\r\n component: LoginComponent\r\n },\r\n {\r\n path: 'unit-login',\r\n component: UnitLoginComponent,\r\n data: { title: 'Unit login' }\r\n },\r\n {\r\n path: 'admin',\r\n // 2018-3-1 Angular currently doesn't let CanLoad have the full URL being asked for, so we can't use our guard as a CanLoad... yet; there's a pull request out there so maybe soon?\r\n canActivate: [AuthorizeGuard],\r\n // data: {\r\n // roles: [\r\n // Security.ApplicationRoles.byuiAdmin,\r\n // Security.ApplicationRoles.byuiLeader\r\n // ]\r\n // },\r\n loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)\r\n },\r\n {\r\n path: 'leader',\r\n canActivate: [LeaderGuard],\r\n data: {\r\n // roles: [\r\n // Security.ApplicationRoles.byuiAdmin,\r\n // Security.ApplicationRoles.byuiLeader\r\n // ], // TODO figure out how to secure down to LDS Account too\r\n preload: true\r\n },\r\n loadChildren: () => import('./leader/leader.module').then(m => m.LeaderModule)\r\n },\r\n { path: '', redirectTo: 'units', pathMatch: 'full' },\r\n {\r\n path: '404',\r\n component: NotFoundComponent,\r\n data: { title: 'Page not found' }\r\n },\r\n {\r\n path: '**',\r\n component: NotFoundComponent,\r\n data: { title: 'Page not found' }\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [\r\n RouterModule.forRoot(routes, {\r\n preloadingStrategy: SelectivePreloadingStrategy,\r\n relativeLinkResolution: 'legacy'\r\n})\r\n ],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule {}\r\n","// code to set title based on this url: https://toddmotto.com/dynamic-page-titles-angular-2-router-events\r\n\r\nimport { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { Router, NavigationEnd, ActivatedRoute } from '@angular/router';\r\nimport { Title } from '@angular/platform-browser';\r\n\r\nimport { ConfigService } from './shared';\r\nimport { Subscription } from 'rxjs';\r\nimport { filter, map, mergeMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n\r\n private routerSubscription: Subscription;\r\n\r\n constructor (\r\n private configService: ConfigService,\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private titleService: Title\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.configService.populate();\r\n\r\n // populate the page's title from the route's data.title property\r\n this.routerSubscription = this.router.events\r\n .pipe(\r\n filter((event) => event instanceof NavigationEnd),\r\n map(() => this.activatedRoute),\r\n map((route) => {\r\n while (route.firstChild) {\r\n route = route.firstChild;\r\n }\r\n return route;\r\n }),\r\n filter((route) => route.outlet === 'primary'),\r\n mergeMap((route) => route.data)\r\n )\r\n .subscribe((event) => this.titleService.setTitle(event['title']));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.routerSubscription.unsubscribe();\r\n }\r\n}\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { PDFExportModule } from '@progress/kendo-angular-pdf-export';\r\n\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { LoginComponent } from './login.component';\r\nimport {\r\n AuthInterceptor,\r\n SortService,\r\n ChurchUnitsDataService,\r\n HousingDataService,\r\n UserService,\r\n ConfigService,\r\n AuthorizeGuard,\r\n StudentsDataService,\r\n SelectChurchUnitDialog,\r\n ConfirmDialog,\r\n MessageDialog,\r\n LeaderGuard,\r\n CampusWardsDataService,\r\n HasChangesGuard,\r\n CampusUnitsCommunicationsDataService,\r\n UnitAdminGuard,\r\n CampusUnitsMessageService,\r\n EmailService\r\n} from './shared';\r\nimport { SharedModule } from './shared/shared.module';\r\nimport { UnitInformationModule } from './unit-information/unit-information.module';\r\nimport { SelectivePreloadingStrategy } from './selective-preloading-strategy';\r\nimport { NavigationService } from './shared/services/navigation.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n LoginComponent,\r\n SelectChurchUnitDialog,\r\n ConfirmDialog,\r\n MessageDialog\r\n ],\r\n imports: [\r\n BrowserModule,\r\n BrowserAnimationsModule,\r\n HttpClientModule,\r\n SharedModule,\r\n UnitInformationModule,\r\n AppRoutingModule,\r\n PDFExportModule\r\n ],\r\n entryComponents: [SelectChurchUnitDialog, ConfirmDialog, MessageDialog],\r\n providers: [\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: AuthInterceptor,\r\n multi: true\r\n },\r\n SelectivePreloadingStrategy,\r\n AuthorizeGuard,\r\n LeaderGuard,\r\n UnitAdminGuard,\r\n ConfigService,\r\n UserService,\r\n EmailService,\r\n HousingDataService,\r\n ChurchUnitsDataService,\r\n SortService,\r\n StudentsDataService,\r\n NavigationService,\r\n CampusWardsDataService,\r\n CampusUnitsMessageService,\r\n CampusUnitsCommunicationsDataService,\r\n HasChangesGuard\r\n ],\r\n bootstrap: [AppComponent]\r\n})\r\nexport class AppModule {}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { UserService } from './shared';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\n\r\n/**\r\n * This component really has no view, it just simply routes the user to login or if already logged in, to a different page.\r\n */\r\n@Component({ template: '' })\r\nexport class LoginComponent implements OnInit {\r\n \r\n private defaultPage = 'admin/home-ward/students';\r\n\r\n returnUrl = '';\r\n\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n private route: ActivatedRoute\r\n ) {}\r\n\r\n ngOnInit() {\r\n const baseUrl = document.getElementsByTagName('base')[0].href;\r\n\r\n // already have a / in the appRoot\r\n this.returnUrl = `${baseUrl}${this.defaultPage}`;\r\n\r\n // check if there's a specific page we really want\r\n if (this.route.snapshot.queryParams['returnUrl']) {\r\n this.returnUrl = `${baseUrl}${this.route.snapshot.queryParams['returnUrl']}`;\r\n }\r\n\r\n // TODO might need to redo the isLoggedIn() to something like isLoggedInByuiAccount() and isLoggedInLdsAccount() or something...\r\n if (this.userService.isLoggedIn()) {\r\n this.router.navigate([this.defaultPage]);\r\n } else {\r\n window.location.href = `${baseUrl}support/login?redirectUrl=${this.returnUrl}`;\r\n }\r\n }\r\n}\r\n","\r\nimport { Injectable } from '@angular/core';\r\nimport { PreloadingStrategy, Route } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class SelectivePreloadingStrategy implements PreloadingStrategy {\r\n\r\n /**\r\n * Determines if the module should be preloaded based on a flag.\r\n */\r\n preload(route: Route, load: () => Observable): Observable {\r\n if (route.data && route.data['preload']) {\r\n return load();\r\n } else {\r\n return of(null);\r\n }\r\n }\r\n}\r\n","import { Injectable, Injector } from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor,\r\n HttpErrorResponse\r\n} from '@angular/common/http';\r\nimport { ConfigService } from './services';\r\nimport { Config, Refresh } from './models';\r\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\r\nimport { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';\r\nimport { Router } from '@angular/router';\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n\r\n constructor(private router: Router) {}\r\n\r\n intercept(\r\n request: HttpRequest,\r\n next: HttpHandler\r\n ): Observable> {\r\n return next.handle(request).pipe(\r\n catchError((err) => {\r\n if (err instanceof HttpErrorResponse) {\r\n if (err.status === 401) {\r\n return this.login();\r\n }\r\n }\r\n return throwError(err);\r\n })\r\n );\r\n }\r\n\r\n private login() {\r\n this.router.navigate(['/login']);\r\n return throwError('');\r\n }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { Address } from '../../models';\r\n\r\n@Component({\r\n selector: 'app-address',\r\n templateUrl: './address.component.html',\r\n styleUrls: ['./address.component.scss']\r\n})\r\nexport class AddressComponent implements OnInit {\r\n\r\n @Input() address: Address;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { ApprovedAddress } from '../../index';\r\n\r\n@Component({\r\n selector: 'app-approved-addresses',\r\n templateUrl: './approved-addresses.component.html',\r\n styleUrls: ['./approved-addresses.component.scss']\r\n})\r\nexport class ApprovedAddressesComponent implements OnInit {\r\n\r\n @Input() addresses: ApprovedAddress[];\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n getDistinctAddressesWithApartmentsTogether() {\r\n // turn our addresses into a list of things like: 123 Dr. APTs: 1, 2A, 3, 4, A\r\n\r\n // reduce the addresses to an object whose property names are the address without the apartment and values are array of apartment numbers\r\n const reducedAddresses = this.addresses.reduce((accumulator, address) => {\r\n if (!accumulator[address.addressWithoutApartment]) {\r\n accumulator[address.addressWithoutApartment] = [];\r\n }\r\n \r\n accumulator[address.addressWithoutApartment].push(` ${address.apartmentNumber}${address.apartmentLetter}`);\r\n\r\n return accumulator;\r\n }, {});\r\n\r\n let groupedAddresses: any = [];\r\n for (const key in reducedAddresses) {\r\n const address = {header: key, apartmentNumbers: null};\r\n if (reducedAddresses[key].length > 1) {\r\n address.header += 's: ';\r\n address.apartmentNumbers = reducedAddresses[key];\r\n }\r\n groupedAddresses.push(address);\r\n }\r\n\r\n return groupedAddresses;\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\r\nimport { CampusUnitMessage } from '../../models/notifications/campus-unit-message.model';\r\n\r\n@Component({\r\n selector: 'app-campus-unit-message-display',\r\n templateUrl: './campus-unit-message-display.component.html',\r\n styleUrls: ['./campus-unit-message-display.component.scss']\r\n})\r\nexport class CampusUnitMessageDisplayComponent implements OnInit {\r\n\r\n private currentMessage: CampusUnitMessage;\r\n active = false;\r\n canSetActive = true;\r\n\r\n @Input() isAdmin = false;\r\n @Input()\r\n set message(message: CampusUnitMessage) {\r\n this.currentMessage = message;\r\n this.active = this.message.active;\r\n\r\n const currentDate = new Date();\r\n const messageExpireDate = new Date(message.endDate);\r\n\r\n if (currentDate.getTime() < messageExpireDate.getTime()) {\r\n this.canSetActive = false;\r\n }\r\n }\r\n get message(): CampusUnitMessage { return this.currentMessage; }\r\n\r\n\r\n @Output() onEdit = new EventEmitter();\r\n @Output() onToggleMessageActiveState = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n edit() {\r\n this.onEdit.emit(this.message);\r\n }\r\n\r\n toggleActivateDeactivate() {\r\n this.onToggleMessageActiveState.emit(this.message);\r\n }\r\n\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n Inject,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { CampusUnitMessage } from '../../../models/notifications/campus-unit-message.model';\r\nimport {\r\n StartDateBeforeEndDate,\r\n StartEndDateValidParentMatcher\r\n} from '../../../validators/form.validator';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-campus-unit-message-edit-dialog',\r\n templateUrl: './campus-unit-message-edit-dialog.component.html',\r\n styleUrls: ['./campus-unit-message-edit-dialog.component.scss']\r\n})\r\nexport class CampusUnitMessageEditDialogComponent implements OnInit {\r\n title = 'New Message';\r\n message = '';\r\n isNew = true;\r\n messageForm: FormGroup;\r\n startDatePos = new Date();\r\n endDatePos = new Date();\r\n minDate = new Date();\r\n isValidForm = false;\r\n currentMessage: CampusUnitMessage;\r\n startEndDateValidParentMatcher = new StartEndDateValidParentMatcher();\r\n\r\n onFinishedCreate = new EventEmitter();\r\n onFinishedEdit = new EventEmitter();\r\n\r\n startDateControl = new FormControl(new Date(), [Validators.required]);\r\n endDateControl = new FormControl(new Date(), [Validators.required]);\r\n messageControl = new FormControl('', [Validators.required]);\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) data\r\n ) {\r\n this.title = data ? 'Edit' : 'New Message';\r\n\r\n if (data && data.currentMessage) {\r\n this.currentMessage = data.currentMessage;\r\n this.messageControl.setValue(this.currentMessage.message);\r\n this.isNew = false;\r\n\r\n if (this.currentMessage.startDate) {\r\n this.startDatePos = new Date(this.currentMessage.startDate);\r\n this.startDateControl.setValue(this.startDatePos);\r\n }\r\n if (this.currentMessage.endDate) {\r\n this.endDatePos = new Date(this.currentMessage.endDate);\r\n this.endDateControl.setValue(this.endDatePos);\r\n }\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.messageForm = this.formBuilder.group(\r\n {\r\n startDateControl: this.startDateControl,\r\n endDateControl: this.endDateControl,\r\n messageControl: this.messageControl\r\n },\r\n { validator: StartDateBeforeEndDate }\r\n );\r\n\r\n this.messageForm.valueChanges.subscribe(data => {\r\n this.validateForm();\r\n });\r\n }\r\n\r\n close() {\r\n this.dialogRef.close();\r\n }\r\n\r\n validForm() {\r\n return this.messageForm.valid;\r\n }\r\n\r\n isValidDateRange() {\r\n const startDate = new Date(this.startDateControl.value);\r\n const endDate = new Date(this.endDateControl.value);\r\n\r\n return endDate > startDate;\r\n }\r\n\r\n validateForm(): any {\r\n if (this.validForm()) {\r\n this.isValidForm = true;\r\n } else {\r\n this.isValidForm = false;\r\n }\r\n }\r\n\r\n save() {\r\n if (!this.validForm()) {\r\n this.isValidForm = false;\r\n return;\r\n }\r\n\r\n let newMessage: CampusUnitMessage = new CampusUnitMessage();\r\n this.isValidForm = true;\r\n if (!this.isNew) {\r\n newMessage = Object.assign(this.currentMessage);\r\n }\r\n\r\n newMessage.message = this.messageControl.value;\r\n newMessage.startDate = new Date(this.startDateControl.value);\r\n newMessage.endDate = new Date(this.endDateControl.value);\r\n newMessage.active = true;\r\n\r\n if (!this.isNew) {\r\n this.onFinishedEdit.emit({\r\n currentMessage: this.currentMessage,\r\n newMessage: newMessage\r\n });\r\n } else {\r\n this.onFinishedCreate.emit(newMessage);\r\n }\r\n\r\n // Incase the calling component is subscribing to the afterClose event\r\n this.dialogRef.close({\r\n currentMessage: this.currentMessage,\r\n newMessage: newMessage\r\n });\r\n }\r\n\r\n tinyMceInit = {\r\n height: 300,\r\n menubar: false,\r\n plugins: 'lists link preview wordcount visualblocks',\r\n toolbar:\r\n 'insert | undo redo | formatselect | bold italic backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat',\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { CampusUnitsMessageService } from '../../services/data/campus-units-message.service';\r\nimport { CampusUnitMessage } from '../../models/notifications/campus-unit-message.model';\r\nimport { CampusUnitMessageEditDialogComponent } from './campus-unit-message-edit-dialog/campus-unit-message-edit-dialog.component';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-campus-unit-message',\r\n templateUrl: './campus-unit-message.component.html',\r\n styleUrls: ['./campus-unit-message.component.scss']\r\n})\r\nexport class CampusUnitMessageComponent implements OnInit {\r\n\r\n messages: CampusUnitMessage[] = [];\r\n canShowMessages = false;\r\n loading = true;\r\n\r\n constructor(private messageService: CampusUnitsMessageService, private matDialog: MatDialog) { }\r\n\r\n ngOnInit() {\r\n this.loadMessages();\r\n }\r\n\r\n loadMessages() {\r\n this.loading = true;\r\n this.canShowMessages = false;\r\n\r\n this.messageService.getAllMessages().subscribe(result => {\r\n this.messages = result;\r\n this.sortMessages();\r\n this.loading = false;\r\n\r\n if (this.messages && this.messages.length > 0) {\r\n this.canShowMessages = true;\r\n }\r\n\r\n }, error => {\r\n this.canShowMessages = false;\r\n this.loading = false;\r\n })\r\n }\r\n\r\n\r\n /**\r\n * Create a new message\r\n */\r\n onCreateNewMessage() {\r\n const isEdit = false;\r\n const dialogRef = this.openEditDialog(isEdit);\r\n\r\n const onfinishEvent = dialogRef.componentInstance.onFinishedCreate.subscribe(result => {\r\n this.onCreateMessageFinished(result);\r\n })\r\n\r\n dialogRef.afterClosed().subscribe(data => {\r\n onfinishEvent.unsubscribe();\r\n })\r\n }\r\n\r\n /**\r\n * This function is called after the user finish editing a new message\r\n * @param newMessage the new message\r\n */\r\n onCreateMessageFinished(newMessage: CampusUnitMessage) {\r\n if (!newMessage) {\r\n return; // TODO: show error message\r\n }\r\n\r\n this.messageService.createMessage(newMessage).subscribe(result => {\r\n if (result) {\r\n this.messages.push(result);\r\n this.sortMessages();\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Edit an existing message\r\n * @param currentMessage the message to be edited\r\n */\r\n editMessage(currentMessage: CampusUnitMessage) {\r\n\r\n if (!currentMessage) {\r\n return;\r\n }\r\n\r\n const isEdit = true;\r\n const dialogRef = this.openEditDialog(isEdit, currentMessage);\r\n\r\n const editEvent = dialogRef.componentInstance.onFinishedEdit.subscribe(result => {\r\n this.onEditMessageFinished(result);\r\n })\r\n\r\n dialogRef.afterClosed().subscribe(data => {\r\n editEvent.unsubscribe();\r\n })\r\n }\r\n\r\n onEditMessageFinished(editRequest: any) {\r\n if (!editRequest || !editRequest.currentMessage || !editRequest.newMessage) {\r\n return; // TODO: show error message\r\n }\r\n\r\n const currentMessage: CampusUnitMessage = editRequest.currentMessage;\r\n const newMessage: CampusUnitMessage = editRequest.newMessage;\r\n\r\n const index = this.messages.indexOf(currentMessage);\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n this.messageService.updateMessage(currentMessage.campusUnitsMessageId, newMessage).subscribe(result => {\r\n if (result) {\r\n this.messages[index] = result;\r\n this.sortMessages();\r\n }\r\n })\r\n\r\n }\r\n\r\n /**\r\n * Disable or activate a message\r\n * @param message the message to be edited\r\n */\r\n toggleMessageActiveState(message: CampusUnitMessage) {\r\n if (!message) {\r\n return;\r\n }\r\n\r\n const index = this.messages.indexOf(message);\r\n if (index < 0) {\r\n return;\r\n }\r\n\r\n const today = new Date();\r\n\r\n let newMessage = new CampusUnitMessage();\r\n newMessage = Object.assign(message);\r\n\r\n if (message.active) {\r\n newMessage.active = false;\r\n } else {\r\n newMessage.active = true;\r\n }\r\n\r\n this.messageService.updateMessage(message.campusUnitsMessageId, newMessage).subscribe(result => {\r\n if (result) {\r\n this.messages[index] = result;\r\n this.sortMessages();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens a dialog box to create/edit a message\r\n * @param edit sinifies if this is an edit or not\r\n * @param currentMessage optional. Required if it's an edit request\r\n */\r\n private openEditDialog(edit: boolean, currentMessage: CampusUnitMessage = null) {\r\n const dialogConfig = new MatDialogConfig();\r\n\r\n dialogConfig.disableClose = true;\r\n\r\n if (currentMessage) {\r\n dialogConfig.data = {\r\n currentMessage: currentMessage\r\n };\r\n }\r\n\r\n\r\n dialogConfig.height = 'auto';\r\n dialogConfig.width = '70%';\r\n\r\n return this.matDialog.open(CampusUnitMessageEditDialogComponent, dialogConfig);\r\n }\r\n\r\n sortMessages() {\r\n this.messages.sort((a, b) => {\r\n if (a.active && !b.active) {\r\n return 1;\r\n }\r\n if ((a.active && b.active) && (a.endDate > b.endDate)) {\r\n return 1;\r\n }\r\n if ((a.active && b.active) && (a.endDate < b.endDate)) {\r\n return -1;\r\n }\r\n\r\n\r\n if (!a.active && b.active) {\r\n return -1;\r\n }\r\n if ((!a.active && !b.active) && (a.endDate > b.endDate)) {\r\n return 1;\r\n }\r\n if ((!a.active && !b.active) && (a.endDate < b.endDate)) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n this.messages.reverse();\r\n }\r\n\r\n}\r\n","import { Component, OnChanges, SimpleChanges, Input, Output, forwardRef, ViewChild, EventEmitter } from '@angular/core';\r\nimport { CampusUnit } from '../../models';\r\nimport { SortService } from '../../services';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\n\r\n@Component({\r\n selector: 'app-campus-unit-select',\r\n templateUrl: './campus-unit-select.component.html',\r\n styleUrls: ['./campus-unit-select.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CampusUnitSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CampusUnitSelectComponent implements OnChanges, ControlValueAccessor {\r\n @ViewChild('autoCompleteInput', { static: true, read: MatAutocompleteTrigger }) autoCompleteTrigger: MatAutocompleteTrigger;\r\n\r\n @Input() units: CampusUnit[];\r\n @Input() placeholder: string;\r\n\r\n @Output() unitSelected: EventEmitter = new EventEmitter();\r\n\r\n filteredUnits: CampusUnit[];\r\n _selectedUnit: CampusUnit;\r\n\r\n get selectedUnit() {\r\n return this._selectedUnit;\r\n }\r\n\r\n set selectedUnit(value) {\r\n this._selectedUnit = value;\r\n this.propagateChange(this._selectedUnit);\r\n }\r\n\r\n disabled = false;\r\n\r\n // an empty function for handling on change notification\r\n propagateChange = (_: any) => {};\r\n\r\n constructor(private sorter: SortService) {}\r\n\r\n // -- Interface Methods\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.selectedUnit = null;\r\n this.onUnitChange();\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.selectedUnit = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n // don't need to do anything here\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // -- End Interface Methods\r\n\r\n /**\r\n * Clears the selected unit.\r\n */\r\n clear() {\r\n this.selectedUnit = null;\r\n // have to have a set timeout or else this doesn't actually display the panel; would be nice to know why\r\n setTimeout(() => {\r\n if (this.autoCompleteTrigger) {\r\n this.autoCompleteTrigger.openPanel();\r\n }});\r\n }\r\n\r\n /**\r\n * Gets what should be displayed when a campus ward is selected.\r\n */\r\n getUnitDisplay(campusUnit: CampusUnit): string {\r\n return campusUnit ? campusUnit.name : '';\r\n }\r\n\r\n /**\r\n * Filters our list of units, using a contains on the name.\r\n *\r\n * We have to do an any on our type because as the user types it will be a string, but once selected it's the whole object.\r\n */\r\n onUnitChange(unitName?: any) {\r\n if (!this.units) {\r\n return;\r\n }\r\n\r\n // don't love that I'm doing a type check, but when the user types it's a string and after making selection we get called again with the real object\r\n if (unitName && typeof unitName === 'string') {\r\n const unitNameNoCase = unitName.toLowerCase();\r\n this.filteredUnits = this.units.filter(unit => {\r\n return unit.name.toLowerCase().indexOf(unitNameNoCase) >= 0;\r\n });\r\n } else {\r\n this.filteredUnits = this.units.slice(0);\r\n }\r\n\r\n this.filteredUnits.sort(this.sorter.sortChurchUnitsAsc);\r\n }\r\n\r\n /**\r\n * When a unit is selected, emit an event with the unit.\r\n */\r\n onUnitSelected() {\r\n this.unitSelected.emit(this.selectedUnit);\r\n }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-content-or-error',\r\n templateUrl: './content-or-error.component.html',\r\n styleUrls: ['./content-or-error.component.scss']\r\n})\r\nexport class ContentOrErrorComponent implements OnInit {\r\n\r\n @Input() errorMessage: string;\r\n @Input() hasError: boolean;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-empty-response',\r\n templateUrl: './empty-response-recieved.component.html',\r\n styleUrls: ['./empty-response-recieved.component.scss']\r\n})\r\nexport class EmptyResponseRecievedComponent implements OnInit {\r\n\r\n @Input() message: string;\r\n @Input() enableRetry: boolean;\r\n @Input() retryMessage: string;\r\n @Output() onRetry = new EventEmitter();\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n if (!this.retryMessage) {\r\n this.retryMessage = 'Retry';\r\n }\r\n }\r\n\r\n retry() {\r\n this.onRetry.emit();\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-home-page',\r\n templateUrl: './home-page.component.html',\r\n styleUrls: ['./home-page.component.scss']\r\n})\r\nexport class HomePageComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","export * from './address/address.component';\r\nexport * from './approved-addresses/approved-addresses.component';\r\nexport * from './loading/loading.component';\r\nexport * from './navigation-drawer/navigation-drawer.component';\r\nexport * from './toolbar/toolbar.component';\r\nexport * from './not-found.component';\r\nexport * from './unauthorized.component';\r\nexport * from './campus-unit-select/campus-unit-select.component';\r\nexport * from './local-ward-select/local-ward-select.component';\r\nexport * from './content-or-error/content-or-error.component';\r\nexport * from './ward-complexes/ward-complexes.component';\r\nexport * from './campus-unit-message/campus-unit-message.component';\r\nexport * from './campus-unit-message/campus-unit-message-edit-dialog/campus-unit-message-edit-dialog.component'\r\nexport * from './campus-unit-message-display/campus-unit-message-display.component';\r\nexport * from './empty-response-recieved/empty-response-recieved.component';\r\nexport * from './home-page/home-page.component';\r\n","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loading',\r\n template: `
\r\n \r\n

{{message}}

\r\n
`,\r\n styleUrls: ['./loading.component.scss']\r\n})\r\nexport class LoadingComponent implements OnInit {\r\n @Input() message: string;\r\n @Input() inline: boolean;\r\n @Input() size: string;\r\n\r\n // diameter of the spinner; default to xl\r\n diameter = 75;\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Handle changes to our Input parameters; specifically monitoring changes to the size one and updating our diameter accordingly.\r\n */\r\n ngOnInit(): void {\r\n switch (this.size) {\r\n case 'xs':\r\n this.diameter = 15;\r\n break;\r\n case 'sm':\r\n this.diameter = 20;\r\n break;\r\n case 'md':\r\n this.diameter = 30;\r\n break;\r\n case 'lg':\r\n this.diameter = 50;\r\n break;\r\n default:\r\n this.diameter = 75;\r\n break;\r\n }\r\n }\r\n\r\n getClasses() {\r\n return {\r\n 'full-spinner': !this.inline,\r\n 'inline-spinner': this.inline\r\n };\r\n }\r\n}\r\n","import { Component, OnChanges, SimpleChanges, Input, Output, forwardRef, ViewChild } from '@angular/core';\r\nimport { LocalWard } from '../../models';\r\nimport { SortService } from '../../services';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\n\r\n@Component({\r\n selector: 'app-local-ward-select',\r\n templateUrl: './local-ward-select.component.html',\r\n styleUrls: ['./local-ward-select.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => LocalWardSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class LocalWardSelectComponent implements OnChanges, ControlValueAccessor {\r\n\r\n @ViewChild('autoCompleteInput', { static: true, read: MatAutocompleteTrigger }) autoCompleteTrigger: MatAutocompleteTrigger;\r\n\r\n @Input() localWards: LocalWard[];\r\n @Input() placeholder: string;\r\n\r\n filteredLocalWards: LocalWard[];\r\n _selectedLocalWard: LocalWard;\r\n\r\n get selectedLocalWard() {\r\n return this._selectedLocalWard;\r\n }\r\n\r\n set selectedLocalWard(value) {\r\n this._selectedLocalWard = value;\r\n this.propagateChange(this._selectedLocalWard);\r\n }\r\n\r\n disabled = false;\r\n\r\n // an empty function for handling on change notification\r\n propagateChange = (_: any) => {};\r\n\r\n constructor(private sorter: SortService) {}\r\n\r\n // -- Interface Methods\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.selectedLocalWard = null;\r\n this.onLocalWardChange();\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.selectedLocalWard = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n // don't need to do anything here\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // -- End Interface Methods\r\n\r\n /**\r\n * Clears the selected unit.\r\n */\r\n clear() {\r\n this.selectedLocalWard = null;\r\n // have to have a set timeout or else this doesn't actually display the panel; would be nice to know why\r\n setTimeout(() => {\r\n if (this.autoCompleteTrigger) {\r\n this.autoCompleteTrigger.openPanel();\r\n }});\r\n }\r\n\r\n /**\r\n * Gets what should be displayed when a local ward is selected.\r\n */\r\n getLocalWardDisplay(localWard: LocalWard): string {\r\n return localWard ? localWard.localUnit.name : '';\r\n }\r\n\r\n /**\r\n * Filters our list of local wards based on what has been typed. Does a contains.\r\n */\r\n onLocalWardChange(wardName?: any) {\r\n if (!this.localWards) {\r\n return;\r\n }\r\n\r\n // don't love that I'm doing a type check, but when the user types it's a string and after making selection we get called again with the real object\r\n if (wardName && typeof wardName === 'string') {\r\n const wardNameNoCase = wardName.toLowerCase();\r\n this.filteredLocalWards = this.localWards.filter(ward => {\r\n return ward.localUnit.name.toLowerCase().indexOf(wardNameNoCase) >= 0;\r\n });\r\n } else {\r\n this.filteredLocalWards = this.localWards.slice(0);\r\n }\r\n\r\n this.filteredLocalWards.sort(this.sorter.sortLocalWardsAsc);\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { MatSidenav } from '@angular/material/sidenav';\r\nimport { NavigationService } from '../../services';\r\n\r\n@Component({\r\n selector: 'app-navigation-drawer',\r\n templateUrl: './navigation-drawer.component.html',\r\n styleUrls: ['./navigation-drawer.component.scss']\r\n})\r\nexport class NavigationDrawerComponent {\r\n\r\n @Input() sideNav: MatSidenav;\r\n @Output() linkSelected: EventEmitter = new EventEmitter();\r\n\r\n navigation: NavigationService\r\n\r\n constructor(navigationService: NavigationService) {\r\n this.navigation = navigationService;\r\n }\r\n\r\n /**\r\n * Whether or not the user is proxying.\r\n */\r\n isProxying() {\r\n return this.navigation.proxiedUnit != null;\r\n }\r\n\r\n /**\r\n * Stops proxying and then emits our event that we've selected a link.\r\n */\r\n stopProxying() {\r\n this.navigation.stopUnitProxying()\r\n this.onLinkSelected();\r\n }\r\n\r\n /**\r\n * Emits an event stating that the user has selected a link.\r\n */\r\n onLinkSelected(): void {\r\n this.linkSelected.emit(null);\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n template: `

Whoops!

Sorry, but it looks like the page you've requested couldn't be found. Please make sure that you've typed the address correctly.

`\r\n})\r\nexport class NotFoundComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\r\nimport { UserService } from '../../services/user.service';\r\nimport { NavigationService, CampusUnitsMessageService } from '../../services';\r\nimport { CampusUnitMessage } from '../../models/notifications/campus-unit-message.model';\r\nimport { Router } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-toolbar',\r\n templateUrl: './toolbar.component.html',\r\n styleUrls: ['./toolbar.component.scss']\r\n})\r\nexport class ToolbarComponent implements OnInit {\r\n @Output() toggleMenu: EventEmitter = new EventEmitter();\r\n showNotification = false;\r\n activeMessages: Array = [];\r\n currentMessage = '';\r\n notificationsLoaded = false;\r\n\r\n navigationService: NavigationService = null;\r\n userService: UserService = null;\r\n\r\n constructor(\r\n navigationService: NavigationService,\r\n private messageService: CampusUnitsMessageService,\r\n private user: UserService,\r\n private route: Router\r\n ) {\r\n this.navigationService = navigationService;\r\n this.route.events.subscribe(u => {\r\n if (this.canShowNotifications() && !this.notificationsLoaded) {\r\n this.loadActiveNotifications();\r\n this.notificationsLoaded = true;\r\n this.userService = user;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.canShowNotifications()) {\r\n this.loadActiveNotifications();\r\n }\r\n }\r\n\r\n canShowNotifications() {\r\n // const isAdmin = this.navigationService.loggedInAsAdmin();\r\n // const isLeader = this.navigationService.loggedInAsLeader();\r\n // const isStakeLeader = this.navigationService.loggedInAsStake();\r\n // // const isWard = this.navigationService.loggedInAsWard;\r\n\r\n // return isLeader || isStakeLeader || isAdmin;\r\n if (\r\n this.navigationService.loggedInAsLeader() ||\r\n this.navigationService.loggedInAsAdmin()\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Emits our toggle menu event.\r\n */\r\n toggle(): void {\r\n this.toggleMenu.emit(null);\r\n }\r\n\r\n loadActiveNotifications() {\r\n this.messageService.getActiveMessages().subscribe(result => {\r\n if (result) {\r\n this.activeMessages = result;\r\n this.activeMessages.sort(this.compareNotificationsDesc);\r\n this.setCurrentMessage();\r\n if (result && result.length > 0) {\r\n this.showNotification = true;\r\n }\r\n } else {\r\n this.showNotification = false;\r\n }\r\n });\r\n }\r\n\r\n getCurrentNotificationMessage() {\r\n if (this.activeMessages) {\r\n return this.activeMessages[0].message;\r\n }\r\n }\r\n\r\n /**\r\n * Compare notifications in descending order\r\n * @param a first notification\r\n * @param b second notification\r\n */\r\n compareNotificationsDesc(a: CampusUnitMessage, b: CampusUnitMessage): number {\r\n if (a.startDate > b.startDate) {\r\n return -1;\r\n }\r\n\r\n if (a.startDate < b.startDate) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n onDismissNotification() {\r\n if (this.activeMessages) {\r\n this.activeMessages.splice(0, 1);\r\n this.setCurrentMessage();\r\n }\r\n\r\n if (this.activeMessages.length <= 0) {\r\n this.showNotification = false;\r\n }\r\n\r\n // prevent the page from reloading\r\n return false;\r\n }\r\n\r\n setCurrentMessage() {\r\n this.currentMessage = this.activeMessages[0]\r\n ? this.activeMessages[0].message\r\n : '';\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n template: `

Access Denied

You are not authorized to access the requested resource.

`\r\n})\r\nexport class UnauthorizedComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { ApprovedHousingSessionInformation, CampusWard, AcademicSession } from '../../models';\r\nimport { HousingDataService, SortService } from '../../services';\r\n\r\n@Component({\r\n selector: 'app-ward-complexes',\r\n templateUrl: './ward-complexes.component.html',\r\n styleUrls: ['./ward-complexes.component.scss']\r\n})\r\nexport class WardComplexesComponent implements OnInit {\r\n @Input() ward: CampusWard;\r\n\r\n academicSessions: AcademicSession[];\r\n selectedAcademicSession: AcademicSession;\r\n\r\n loadingHousing = false;\r\n housingError = false;\r\n housingData: ApprovedHousingSessionInformation[];\r\n\r\n constructor(private housingService: HousingDataService, private sorter: SortService) {}\r\n\r\n ngOnInit() {\r\n this.housingService.getAcademicSessions().subscribe(sessions => this.handleSessions(sessions));\r\n }\r\n\r\n /**\r\n * Loads the housing complexes and addresses that have been assigned to the ward for the selected semester.\r\n */\r\n loadHousingInformation() {\r\n if (this.ward && this.selectedAcademicSession && !this.loadingHousing) {\r\n this.housingData = null;\r\n this.loadingHousing = true;\r\n this.housingService\r\n .getHousingComplexSessionInformation(this.ward.campusWardId, this.selectedAcademicSession.sessionNumber)\r\n .pipe(\r\n finalize(() => (this.loadingHousing = false))\r\n )\r\n .subscribe(\r\n information => {\r\n this.housingData = information;\r\n this.housingData.sort(this.sorter.sortApprovedHousingSessionInformationAsc);\r\n },\r\n error => {\r\n this.housingError = true;\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Handles the housing sessions.\r\n */\r\n private handleSessions(academicSessions: AcademicSession[]) {\r\n this.academicSessions = academicSessions;\r\n this.academicSessions.sort(this.sorter.sortAcademicSessionsAsc);\r\n if (academicSessions.length > 0) {\r\n this.selectedAcademicSession = this.academicSessions[0];\r\n this.loadHousingInformation();\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\r\n\r\n@Component({\r\n templateUrl: './confirm.dialog.html',\r\n styleUrls: ['./confirm.dialog.scss']\r\n})\r\nexport class ConfirmDialog implements OnInit {\r\n title: string;\r\n message: string;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any) {}\r\n\r\n ngOnInit() {\r\n if (this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n\r\n if (this.data.title) {\r\n this.title = this.data.title;\r\n }\r\n }\r\n}\r\n","export * from './select-church-unit-dialog/select-church-unit.dialog';\r\nexport * from './confirm-dialog/confirm.dialog';\r\nexport * from './message-dialog/message.dialog';\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\r\n\r\n@Component({\r\n templateUrl: './message.dialog.html',\r\n styleUrls: ['./message.dialog.scss']\r\n})\r\nexport class MessageDialog implements OnInit {\r\n title: string;\r\n message: string;\r\n isError = false;\r\n\r\n constructor(@Inject(MAT_DIALOG_DATA) public data: any) {}\r\n\r\n ngOnInit() {\r\n if (this.data.message) {\r\n this.message = this.data.message;\r\n }\r\n\r\n if (this.data.title) {\r\n this.title = this.data.title;\r\n }\r\n\r\n if (this.data.isError) {\r\n this.isError = true;\r\n this.title = 'Sorry, but an error has occurred.'\r\n }\r\n }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { ChurchUnitsDataService } from '../../services';\r\nimport { ChurchUnit, UnitType } from '../../models';\r\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n templateUrl: './select-church-unit.dialog.html',\r\n styleUrls: ['./select-church-unit.dialog.scss']\r\n})\r\nexport class SelectChurchUnitDialog implements OnInit {\r\n enteredUnitNumber: string = null;\r\n searchingForUnit = false;\r\n selectedChurchUnit: ChurchUnit;\r\n unitNotFound = false;\r\n error: string = null;\r\n\r\n validUnitTypes: UnitType[];\r\n\r\n constructor(private churchUnitService: ChurchUnitsDataService, @Inject(MAT_DIALOG_DATA) public data: any) {}\r\n\r\n ngOnInit() {\r\n if (this.data.validUnitTypes) {\r\n this.validUnitTypes = this.data.validUnitTypes;\r\n }\r\n }\r\n\r\n /**\r\n * Looks up the church unit based on the entered unit number.\r\n */\r\n findChurchUnit(): void {\r\n if (!this.searchingForUnit && this.enteredUnitNumber) {\r\n this.searchingForUnit = true;\r\n this.selectedChurchUnit = null;\r\n this.unitNotFound = false;\r\n this.error = null;\r\n\r\n this.churchUnitService\r\n .getChurchUnit(this.enteredUnitNumber)\r\n .pipe(\r\n finalize(() => (this.searchingForUnit = false))\r\n )\r\n .subscribe(\r\n churchUnit => {\r\n this.handleResults(churchUnit);\r\n },\r\n error => {\r\n this.error = 'Unable to find church unit';\r\n }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Handles the results of our search. If nothing comes back, sets not found to true. If we get something back,\r\n * then looks to see if we are supposed to be restricting based on unit type or not. If so, takes those into account.\r\n */\r\n private handleResults(churchUnit: ChurchUnit): void {\r\n if (churchUnit == null) {\r\n this.unitNotFound = true;\r\n } else if (this.validUnitTypes) {\r\n if (churchUnit.unitType != null &&\r\n this.validUnitTypes.indexOf(churchUnit.unitType) > -1) {\r\n this.selectedChurchUnit = churchUnit;\r\n } else {\r\n this.error = `Invalid unit type; valid types are: ${this.validUnitTypes.join(', ')}`;\r\n }\r\n } else {\r\n this.selectedChurchUnit = churchUnit;\r\n }\r\n }\r\n}\r\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { UserService } from '../services/user.service';\r\n\r\n@Directive({\r\n selector: '[appAuthorize]'\r\n})\r\nexport class AuthorizeDirective {\r\n constructor(\r\n private templateRef: TemplateRef,\r\n private viewContainer: ViewContainerRef,\r\n private userService: UserService\r\n ) {}\r\n\r\n @Input()\r\n set appAuthorize(permissions: string[]) {\r\n if (this.userService.userHasRole(permissions)) {\r\n // If condition is true add template to DOM\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else if (permissions && this.userService.userHasRole(permissions)) {\r\n // If condition is true add template to DOM\r\n this.viewContainer.createEmbeddedView(this.templateRef);\r\n } else {\r\n // Else remove template from DOM\r\n this.viewContainer.clear();\r\n }\r\n }\r\n}\r\n","export * from './authorize.directive';\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n CanActivate,\r\n CanLoad,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router,\r\n Route,\r\n Data\r\n} from '@angular/router';\r\nimport { UserService } from '../services/user.service';\r\nimport * as Security from '../tokens/roles.tokens';\r\nimport { NavigationService } from '../services';\r\n\r\n@Injectable()\r\nexport class AuthorizeGuard implements CanActivate, CanLoad {\r\n constructor(\r\n private userService: UserService,\r\n private router: Router,\r\n private navigationService: NavigationService\r\n ) {}\r\n\r\n /**\r\n * Determines whether or not the route can activated based on whether the route requires a role or just an authenticated user.\r\n */\r\n canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n return this.checkLoggedIn(next.data, state.url);\r\n }\r\n\r\n /**\r\n * Determines whether or not a route can load based on whether the route requires a role or just an authenticated user.\r\n */\r\n canLoad(route: Route): boolean {\r\n return this.checkLoggedIn(route.data, route.path);\r\n }\r\n\r\n /**\r\n * Ensures that the user is logged in; if not logged in, a redirect to the login page is done. If already logged in, checks to see\r\n * if the route is protected by roles, and if so ensures the user has those roles; if not, just returns true. If they don't, goes\r\n * to the unauthorized page, if they do, returns true.\r\n *\r\n * @param data The route's data\r\n * @param url The user's desired URL\r\n */\r\n private checkLoggedIn(data: Data, url: string) {\r\n // TODO what about LDS login? we can't just have a \"must be logged in\" if we try to use this same guard for LDS and Admin access\r\n // if (\r\n // this.userService.isLoggedIn() &&\r\n // !this.navigationService.loggedInAsLeader()\r\n // ) {\r\n // // if they're logged in, they'll either get access (if we aren't requiring roles) or be sent to an access denied route\r\n // if (data['roles']) {\r\n // if (\r\n // this.userService.userHasRole([Security.ApplicationRoles.byuiAdmin]) ||\r\n // this.userService.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n // ) {\r\n // return true;\r\n // }\r\n // this.router.navigate(['/unauthorized']);\r\n // return false;\r\n // }\r\n\r\n // return true; // no roles required, just authentication checked\r\n // }\r\n if (\r\n this.userService.isLoggedIn() && (\r\n this.userService.userHasRole([Security.ApplicationRoles.byuiAdmin]) || this.userService.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n )\r\n ) {\r\n // if they're logged in, they'll either get access (if we aren't requiring roles) or be sent to an access denied route\r\n if (data['roles']) {\r\n if (this.userService.userHasRole(data['roles'])) {\r\n return true;\r\n }\r\n this.router.navigate(['/unauthorized']);\r\n return false;\r\n }\r\n return true; // no roles required, just authentication checked\r\n }\r\n this.router.navigate(['/unauthorized']);\r\n return false;\r\n // not logged in yet\r\n // this.router.navigate(['/unit-login'], { queryParams: { returnUrl: url } });\r\n // return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate } from '@angular/router';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ConfirmDialog } from '../dialogs';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * An interface that components can implement in order to use this guard on them.\r\n */\r\nexport interface IComponentHasChanges {\r\n /**\r\n * Indicates whether or not the component has unsaved changes.\r\n */\r\n hasUnsavedChanges: () => Observable | Promise | boolean;\r\n\r\n /**\r\n * The message that should be shown to the user when deciding if they want to continue navigating.\r\n */\r\n readonly unsavedMessage: string;\r\n}\r\n\r\n@Injectable()\r\nexport class HasChangesGuard implements CanDeactivate {\r\n\r\n constructor(private dialog: MatDialog) {}\r\n\r\n canDeactivate(\r\n component: IComponentHasChanges,\r\n currentRoute: ActivatedRouteSnapshot,\r\n currentState: RouterStateSnapshot,\r\n nextState?: RouterStateSnapshot\r\n ): boolean | Observable | Promise {\r\n if (component.hasUnsavedChanges()) {\r\n let message = 'You have unsaved changes. Are you sure you want to continue?';\r\n if (component.unsavedMessage) {\r\n message = component.unsavedMessage;\r\n }\r\n\r\n const confirmDialog = this.dialog.open(ConfirmDialog, { autoFocus: false, data: { title: 'Unsaved changes', message: message } });\r\n return confirmDialog.afterClosed();\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","export * from './authorize.guard';\r\nexport * from './leader.guard';\r\nexport * from './has-changes.guard';\r\nexport * from './unit-admin.guard';\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n CanActivate,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router\r\n} from '@angular/router';\r\nimport { UserService } from '../services/user.service';\r\nimport * as Security from '../tokens/roles.tokens';\r\n\r\n@Injectable()\r\nexport class LeaderGuard implements CanActivate {\r\n constructor(private userService: UserService, private router: Router) {}\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n return this.checkLoggedIn(state.url);\r\n }\r\n\r\n /**\r\n * Ensures that the user is logged in as a leader OR as a BYU-I account with the correct role and has a proxied unit selected.\r\n * If not logged, a redirect to the leader login page is done.\r\n *\r\n * @param data The route's data\r\n * @param url The user's desired URL\r\n */\r\n private checkLoggedIn(url: string): boolean {\r\n if (\r\n this.userService.isLoggedIn() &&\r\n (this.userService.userHasRole([Security.ApplicationRoles.byuiAdmin]) ||\r\n this.userService.userHasRole([Security.ApplicationRoles.byuiLeader]))\r\n ) {\r\n if (this.userService.getProxyUnit()) {\r\n return true;\r\n }\r\n // this.router.navigate(['/admin/proxy']);\r\n this.router.navigate(['/unit-login']);\r\n return false;\r\n }\r\n\r\n // TODO not logged in yet; redirect to leader login\r\n // this.router.navigate(['/login'], { queryParams: { returnUrl: url } });\r\n return false;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n CanActivate,\r\n ActivatedRouteSnapshot,\r\n RouterStateSnapshot,\r\n Router\r\n} from '@angular/router';\r\nimport { UserService } from '../services/user.service';\r\nimport * as Security from '../tokens/roles.tokens';\r\n\r\n@Injectable()\r\nexport class UnitAdminGuard implements CanActivate {\r\n constructor(private userService: UserService, private router: Router) {}\r\n\r\n canActivate(\r\n next: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): boolean {\r\n return this.checkLoggedIn(state.url);\r\n }\r\n\r\n private checkLoggedIn(url: string): boolean {\r\n if (\r\n this.userService.isLoggedIn() &&\r\n this.userService.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n ) {\r\n // this.router.navigate(['/unit-management']);\r\n return true;\r\n }\r\n this.router.navigate(['/unit-login'], { queryParams: {returnUrl: url }});\r\n return false;\r\n }\r\n}\r\n","export * from './auth-interceptor';\r\nexport * from './directives';\r\nexport * from './components';\r\nexport * from './models';\r\nexport * from './services';\r\nexport * from './guards';\r\nexport * from './dialogs';\r\nexport * from './pipes';\r\n","import { CampusUnitsFaq } from './campus-units-faq.model';\r\n\r\nexport class CampusUnitsFaqSection {\r\n campusUnitsFaqSectionId: number;\r\n name: string;\r\n sectionOrder: number;\r\n updatedBy: string;\r\n updatedOn: Date;\r\n active: boolean;\r\n questions: CampusUnitsFaq[];\r\n}\r\n","export class CampusUnitsFaq {\r\n campusUnitsFaqId: number;\r\n question: string;\r\n answer: string;\r\n questionOrder: number;\r\n updatedBy: string;\r\n updatedOn: Date;\r\n campusUnitsFaqSectionId: number;\r\n active: boolean;\r\n}\r\n","import { CampusStakeDetails } from \"./campus-stake-details.model\";\r\n\r\nexport class CampusStakeDetailsForUpdate extends CampusStakeDetails {\r\n password: string;\r\n}\r\n","import { CampusWard } from './campus-ward.model';\r\nimport { CampusStake } from './campus-stake.model';\r\nimport { StakeLeader } from './stake-leader.model';\r\n\r\nexport class CampusStakeDetails extends CampusStake {\r\n officeLocation: string;\r\n interviewTimes: string;\r\n phone: string;\r\n email: string;\r\n modifiedBy: string;\r\n modifiedOn?: Date;\r\n president: StakeLeader;\r\n firstCounselor: StakeLeader;\r\n secondCounselor: StakeLeader;\r\n wards: CampusWard[];\r\n}\r\n","import { CampusUnit } from './campus-unit.model';\r\n\r\nexport class CampusStake extends CampusUnit {\r\n campusStakeId: number;\r\n}\r\n","export class CampusUnitAccess {\r\n password: string;\r\n unitNumber: string;\r\n}\r\n","import { SortableChurchUnit } from './sortable-church-unit.model';\r\n\r\nexport class CampusUnit extends SortableChurchUnit {\r\n isForMarriedStudents: boolean;\r\n}\r\n","import { CampusWard } from './campus-ward.model';\r\nimport { CampusStake } from './campus-stake.model';\r\nimport {LocalWard } from './local-ward.model';\r\n\r\nexport class CampusUnits {\r\n campusWards: CampusWard[];\r\n campusStakes: CampusStake[];\r\n localWards: LocalWard[];\r\n}","import { CampusWardDetails } from \"./campus-ward-details.model\";\r\n\r\nexport class CampusWardDetailsForUpdate extends CampusWardDetails {\r\n password: string;\r\n}\r\n","import { CampusWard } from './campus-ward.model';\r\nimport { CampusStake } from './campus-stake.model';\r\nimport { WardMeeting } from './ward-meeting.model';\r\nimport { LocalWard } from './local-ward.model';\r\nimport { WardLeader } from './ward-leader.model';\r\n\r\nexport class CampusWardDetails extends CampusWard {\r\n bishopOffice: string;\r\n phone: string;\r\n email: string;\r\n modifiedBy: string;\r\n modifiedOn?: Date;\r\n campusStake: CampusStake;\r\n meetings: WardMeeting[];\r\n localWards: LocalWard[];\r\n bishop: WardLeader;\r\n firstCounselor: WardLeader;\r\n secondCounselor: WardLeader;\r\n}\r\n","import { CampusUnit } from './campus-unit.model';\r\n\r\nexport class CampusWard extends CampusUnit {\r\n campusWardId: number;\r\n}\r\n","import { UnitType } from './unit-type.enum';\r\n\r\nexport class ChurchUnit {\r\n unitNumber: string;\r\n name: string;\r\n unitType?: UnitType;\r\n}\r\n","import { SortableChurchUnit } from './sortable-church-unit.model';\r\nimport { StudentListing, CheckableStudentListing } from '../students/student-listing.model';\r\n\r\nexport class HomeWardWithStudents {\r\n homeWard: SortableChurchUnit;\r\n students: StudentListing[];\r\n}\r\n\r\nexport class HomeWardWithCheckAbleStudents {\r\n homeWard: SortableChurchUnit;\r\n students: CheckableStudentListing[];\r\n}\r\n\r\n","export class LocalWardAssignment {\r\n campusWardId?: number;\r\n campusHomeWardIds: number[];\r\n\r\n constructor(campusHomeWardIds: number[], campusWardId?: number) {\r\n this.campusHomeWardIds = campusHomeWardIds;\r\n this.campusWardId = campusWardId;\r\n }\r\n}","import { CampusWard } from './campus-ward.model';\r\nimport { SortableChurchUnit } from './sortable-church-unit.model';\r\n\r\nexport class LocalWard {\r\n campusHomeWardId: number; // primary key\r\n localUnit: SortableChurchUnit;\r\n campusWard: CampusWard;\r\n}\r\n","export class MeetingType {\r\n codeWardMeetingTypeId: number;\r\n code: string;\r\n description: string;\r\n}\r\n","\r\nexport class MemberInfo {\r\n iNumber: string;\r\n firstName: string;\r\n lastName: string;\r\n preferredName: string;\r\n sex: string;\r\n isAttending: boolean;\r\n emailAddress: string;\r\n privacyMessage: string;\r\n byuIdahoPhotoBase64: string;\r\n address: string;\r\n city: string;\r\n state: string;\r\n zip: string;\r\n localPhone: string;\r\n cellPhone: string;\r\n birthday?: Date;\r\n homeCity: string;\r\n homeState: string;\r\n homeChurchUnit: string;\r\n email: string;\r\n track: string;\r\n missionName: string;\r\n phone: string;\r\n appartmentAddress: string;\r\n appartmentNumber: string;\r\n isReturnMissionary: boolean;\r\n}\r\n","export class NewLocalWard {\r\n campusWardId: number;\r\n unitNumber: string;\r\n\r\n constructor(campusWardId: number, unitNumber: string) {\r\n this.campusWardId = campusWardId;\r\n this.unitNumber = unitNumber;\r\n }\r\n}","import { ChurchUnit } from './church-unit.model';\r\n\r\nexport class SortableChurchUnit extends ChurchUnit {\r\n sortName: string;\r\n sortNumber: number\r\n}\r\n","import { UnitLeader } from './unit-leader.model';\r\nimport { StakePosition } from './stake-position.enum';\r\nimport { Address } from '../util/address.model';\r\n\r\nexport class StakeLeader extends UnitLeader {\r\n positionType: StakePosition;\r\n campusStakeId: number;\r\n campusStakeOfficeId: number;\r\n\r\n constructor(positionType?: StakePosition, campusStakeId?: number) {\r\n super();\r\n\r\n this.positionType = positionType;\r\n this.campusStakeId = campusStakeId;\r\n this.address = new Address();\r\n\r\n if (positionType) {\r\n switch (positionType) {\r\n case StakePosition.President:\r\n this.position = 'President';\r\n break;\r\n case StakePosition.FirstCounselor:\r\n this.position = '1st Counselor';\r\n break;\r\n case StakePosition.SecondCounselor:\r\n this.position = '2nd Counselor';\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","export const enum StakePosition {\r\n President = 'President',\r\n FirstCounselor = 'FirstCounselor',\r\n SecondCounselor = 'SecondCounselor'\r\n}\r\n","import { Address } from '../util/address.model';\r\n\r\nexport abstract class UnitLeader {\r\n name: string;\r\n position: string;\r\n address: Address;\r\n addressPublic: boolean;\r\n workPhone: string;\r\n workPhonePublic: boolean;\r\n homePhone: string;\r\n homePhonePublic: boolean;\r\n cellPhone: string;\r\n cellPhonePublic: boolean;\r\n email: string;\r\n emailPublic: boolean;\r\n modifiedBy: string;\r\n modifiedOn?: Date;\r\n photoBase64: string;\r\n\r\n constructor() {\r\n this.addressPublic = false;\r\n this.cellPhonePublic = false;\r\n this.emailPublic = false;\r\n this.homePhonePublic = false;\r\n this.workPhonePublic = false;\r\n }\r\n}\r\n","export const enum UnitType {\r\n Ward = 'Ward',\r\n Branch = 'Branch',\r\n District = 'District',\r\n Stake = 'Stake'\r\n}\r\n","import { DirectorySortOrder } from './directory-sort-order.enum';\r\nimport { AcademicSession } from '../util/academic-session.model';\r\nimport { WardGroupType } from './ward-group-type.model';\r\nimport { WardGroup } from './ward-group.model';\r\nimport { Gender } from './gender.enum';\r\n\r\n/**\r\n * What the user can pick when generating an administrative or ward member directory.\r\n */\r\nexport class WardDirectoryParameters {\r\n includePhoto: boolean;\r\n includePreferredName: boolean;\r\n includeFullName: boolean;\r\n includeBirthdate: boolean;\r\n includeSchoolAddress: boolean;\r\n includeByuiEmail: boolean;\r\n includeTrack: boolean;\r\n includeCellPhone: boolean;\r\n includeHomeTown: boolean;\r\n includeMission: boolean;\r\n includeReturnedMissionary: boolean;\r\n includeHomeUnit: boolean;\r\n\r\n gender: string;\r\n session: AcademicSession;\r\n wardGroupType: WardGroupType;\r\n wardGroup: WardGroup;\r\n\r\n sortBy: DirectorySortOrder;\r\n\r\n constructor() {\r\n this.sortBy = DirectorySortOrder.Address;\r\n this.gender = Gender.All;\r\n this.includePhoto = true;\r\n this.includePreferredName = true;\r\n this.includeFullName = true;\r\n this.includeBirthdate = true;\r\n this.includeSchoolAddress = true;\r\n this.includeByuiEmail = true;\r\n this.includeTrack = true;\r\n this.includeCellPhone = true;\r\n this.includeHomeTown = true;\r\n this.includeMission = true;\r\n this.includeReturnedMissionary = true;\r\n this.includeHomeUnit = true;\r\n }\r\n}\r\n","import { StudentListing } from '../students/student-listing.model';\r\n\r\nexport class WardGroupAssignment {\r\n campusWardGroupAssignmentId: number;\r\n campusWardGroupId: number;\r\n approvedAddress: string;\r\n localStudent: StudentListing;\r\n}\r\n","import { WardGroupAssignment } from './ward-group-assignment.model';\r\nimport { AcademicSession } from '../util/academic-session.model';\r\n\r\nexport class WardGroupAssignments {\r\n campusWardId: number;\r\n academicSession: AcademicSession;\r\n campusWardGroupTypeId: number;\r\n semesterAssignmentsCanBeRolledFrom: AcademicSession;\r\n\r\n assignments: WardGroupAssignment[];\r\n\r\n constructor() {\r\n this.assignments = [];\r\n }\r\n}\r\n","export class WardGroupType {\r\n campusWardGroupTypeId: number;\r\n name: string;\r\n allowMales: boolean;\r\n allowFemales: boolean;\r\n active: boolean;\r\n}\r\n","import { WardGroupType } from './ward-group-type.model';\r\n\r\nexport class WardGroup {\r\n campusWardGroupId: number;\r\n campusWardId: number;\r\n type: WardGroupType;\r\n name: string;\r\n active: boolean;\r\n\r\n constructor(campusWardId: number) {\r\n this.campusWardId = campusWardId;\r\n this.campusWardGroupId = 0;\r\n this.active = true;\r\n }\r\n}\r\n","import { UnitLeader } from './unit-leader.model';\r\nimport { WardPosition } from './ward-position.enum';\r\nimport { Address } from '../util/address.model';\r\n\r\nexport class WardLeader extends UnitLeader {\r\n positionType: WardPosition;\r\n campusWardId: number;\r\n campusWardOfficeId: number;\r\n\r\n constructor(positionType?: WardPosition, campusWardId?: number) {\r\n super();\r\n\r\n this.positionType = positionType;\r\n this.campusWardId = campusWardId;\r\n this.address = new Address();\r\n\r\n if (positionType) {\r\n switch (positionType) {\r\n case WardPosition.Bishop:\r\n this.position = 'Bishop';\r\n break;\r\n case WardPosition.FirstCounselor:\r\n this.position = '1st Counselor';\r\n break;\r\n case WardPosition.SecondCounselor:\r\n this.position = '2nd Counselor';\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","import { MeetingType } from './meeting-type.model';\r\n\r\nexport class WardMeeting {\r\n campusWardMeetingId: number;\r\n campusWardId: number;\r\n meetingType: MeetingType;\r\n time: string;\r\n location: string;\r\n sortOrder?: number;\r\n}\r\n","export const enum WardPosition {\r\n Bishop = 'Bishop',\r\n FirstCounselor = 'FirstCounselor',\r\n SecondCounselor = 'SecondCounselor'\r\n}\r\n","export class AddressWardAssignment {\r\n approvedAddresses: string[];\r\n sessionNumber: number;\r\n campusWardId?: number;\r\n\r\n constructor(addresses: string[], sessionNumber: number, campusWardId?: number) {\r\n this.approvedAddresses = addresses;\r\n this.sessionNumber = sessionNumber;\r\n this.campusWardId = campusWardId;\r\n }\r\n}\r\n","import { ApprovedHousingComplex } from './approved-housing-complex.model';\r\n\r\nexport class ApprovedAddress {\r\n complex: ApprovedHousingComplex;\r\n fullAddress: string;\r\n addressWithoutApartment: string;\r\n apartmentNumber?: number;\r\n apartmentLetter: string;\r\n actualResidents?: number;\r\n totalResidents?: number;\r\n}\r\n","export class ApprovedHousingComplex {\r\n complexId: number;\r\n name: string;\r\n}\r\n","import { ApprovedAddress } from './approved-address.model';\r\n\r\nexport class ApprovedHousingSessionInformation {\r\n housingComplex: string;\r\n assignedApprovedAddresses: ApprovedAddress[];\r\n}\r\n","import { CampusWard } from '../ecclesiastical/campus-ward.model';\r\nimport { ApprovedAddress } from './approved-address.model';\r\n\r\nexport class CampusWardSessionInformation {\r\n campusWard: CampusWard;\r\n assignedApprovedAddresses: ApprovedAddress[];\r\n}\r\n","import { ApprovedHousingSessionInformation } from './approved-housing-session-information.model';\r\nimport { ApprovedAddress } from './approved-address.model';\r\n\r\nexport class SelectableApprovedHousingSessionInformation {\r\n selectedAddresses: ApprovedAddress[];\r\n approvedHousingSessionInformation: ApprovedHousingSessionInformation;\r\n\r\n constructor(approvedHousingSessionInformation: ApprovedHousingSessionInformation) {\r\n this.approvedHousingSessionInformation = approvedHousingSessionInformation;\r\n this.selectedAddresses = [];\r\n }\r\n}\r\n","import { CampusWardSessionInformation } from './campus-ward-session-information.model';\r\nimport { ApprovedAddress } from './approved-address.model';\r\n\r\nexport class SelectableCampusWardSessionInformation {\r\n selectedAddresses: ApprovedAddress[];\r\n campusWardSessionInformation: CampusWardSessionInformation;\r\n\r\n constructor(campusWardSessionInformation: CampusWardSessionInformation) {\r\n this.campusWardSessionInformation = campusWardSessionInformation;\r\n this.selectedAddresses = [];\r\n }\r\n}\r\n","export * from './util/config.model';\r\nexport * from './util/user.model';\r\nexport * from './util/refresh.model';\r\nexport * from './util/address.model';\r\nexport * from './util/academic-session.model';\r\nexport * from './ecclesiastical/church-unit.model';\r\nexport * from './ecclesiastical/campus-unit.model';\r\nexport * from './ecclesiastical/campus-ward.model';\r\nexport * from './ecclesiastical/campus-ward-details.model';\r\nexport * from './ecclesiastical/campus-stake.model';\r\nexport * from './ecclesiastical/campus-stake-details.model';\r\nexport * from './ecclesiastical/local-ward.model';\r\nexport * from './ecclesiastical/campus-units.model';\r\nexport * from './ecclesiastical/unit-type.enum';\r\nexport * from './ecclesiastical/ward-meeting.model';\r\nexport * from './ecclesiastical/meeting-type.model';\r\nexport * from './ecclesiastical/unit-leader.model';\r\nexport * from './ecclesiastical/local-ward-assignment.model';\r\nexport * from './ecclesiastical/new-local-ward.model';\r\nexport * from './ecclesiastical/sortable-church-unit.model';\r\nexport * from './ecclesiastical/ward-position.enum';\r\nexport * from './ecclesiastical/ward-leader.model';\r\nexport * from './ecclesiastical/stake-position.enum';\r\nexport * from './ecclesiastical/stake-leader.model';\r\nexport * from './ecclesiastical/ward-group-type.model';\r\nexport * from './ecclesiastical/ward-group.model';\r\nexport * from './ecclesiastical/ward-group-assignment.model';\r\nexport * from './ecclesiastical/ward-group-assignments.model';\r\nexport * from './housing/approved-housing-complex.model';\r\nexport * from './housing/campus-ward-session-information.model';\r\nexport * from './housing/selectable-campus-ward-session-information.model';\r\nexport * from './housing/approved-housing-session-information.model';\r\nexport * from './housing/selectable-approved-housing-session-information.model';\r\nexport * from './housing/approved-address.model';\r\nexport * from './housing/address-ward-assignment.model';\r\nexport * from './students/student.model';\r\nexport * from './students/home-unit-change.model';\r\nexport * from './students/student-listing.model';\r\nexport * from './ecclesiastical/home-ward-with-students.model';\r\nexport * from './ecclesiastical/ward-directory-parameters.model';\r\nexport * from './ecclesiastical/member-info.model';\r\nexport * from './communications/campus-units-faq-section.model';\r\nexport * from './communications/campus-units-faq.model';\r\nexport * from './util/unit-login-result.model';\r\nexport * from './ecclesiastical/campus-unit-access.model';\r\nexport * from './ecclesiastical/campus-ward-details-for-update.model';\r\nexport * from './ecclesiastical/campus-stake-details-for-update.model';\r\n","export class CampusUnitMessage {\r\n campusUnitsMessageId: number;\r\n message: string;\r\n active: boolean;\r\n startDate: Date;\r\n endDate: Date;\r\n updatedBy: string;\r\n updateDate: Date;\r\n}\r\n","import { ChurchUnit } from '../ecclesiastical/church-unit.model';\r\n\r\nexport class HomeUnitChange {\r\n iNumber: string;\r\n oldHomeUnit: ChurchUnit;\r\n newHomeUnit: ChurchUnit;\r\n updatedBy: string;\r\n updatedOn: Date;\r\n}\r\n","import { Address } from '../util/address.model';\r\nimport { ChurchUnit } from '../ecclesiastical/church-unit.model';\r\nimport { Student } from './student.model';\r\n\r\nexport class StudentListing {\r\n iNumber: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n privacyMessage: string;\r\n gender: string;\r\n isAttending: boolean;\r\n}\r\n\r\nexport class CheckableStudentListing extends StudentListing {\r\n checked: boolean;\r\n\r\n constructor(student: StudentListing) {\r\n super();\r\n this.iNumber = student.iNumber;\r\n this.firstName = student.firstName;\r\n this.lastName = student.lastName;\r\n this.email = student.email;\r\n this.privacyMessage = student.privacyMessage;\r\n this.gender = student.gender;\r\n this.isAttending = student.isAttending;\r\n this.checked = false;\r\n }\r\n}\r\n","import { Address } from '../util/address.model';\r\nimport { ChurchUnit } from '../ecclesiastical/church-unit.model';\r\n\r\nexport class Student {\r\n iNumber: string;\r\n name: string;\r\n emailAddress: string;\r\n privacyMessage: string;\r\n byuIdahoPhotoBase64: string;\r\n address: Address;\r\n homeUnit: ChurchUnit;\r\n}\r\n","export class AcademicSession {\r\n code: string;\r\n year: number;\r\n description: string;\r\n beginDate: Date;\r\n sessionNumber: number;\r\n}\r\n","export class Address {\r\n line1: string;\r\n line2: string;\r\n line3: string;\r\n line4: string;\r\n city: string;\r\n state: string;\r\n postalCode: string;\r\n country: string;\r\n}\r\n","import { UnitType } from '../ecclesiastical/unit-type.enum';\r\nimport { User } from './user.model';\r\n\r\nexport class Config {\r\n account_type: string;\r\n unitType?: UnitType;\r\n campusUnitId: number;\r\n user: User;\r\n}\r\n","export class Refresh {\r\n token: string;\r\n refreshToken: string;\r\n}\r\n","import { UnitType } from \"../ecclesiastical/unit-type.enum\";\r\n\r\nexport class UnitLoginResult {\r\n name: string;\r\n unitType?: UnitType;\r\n unitId: number;\r\n email: string;\r\n}\r\n","export class User {\r\n name: string;\r\n email: string;\r\n roles: Array;\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ChurchUnit } from '../models';\r\nimport * as Config from '../tokens/constants.tokens';\r\n\r\n@Pipe({\r\n name: 'churchUnit'\r\n})\r\nexport class ChurchUnitPipe implements PipeTransform {\r\n\r\n transform(unit: ChurchUnit, args?: any): any {\r\n if (!unit) {\r\n return '';\r\n }\r\n\r\n if (unit.unitNumber && unit.unitNumber !== Config.Constants.unassignedUnitNumber) {\r\n return `${unit.name} (${unit.unitNumber})`;\r\n }\r\n\r\n return unit.name;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'email'\r\n})\r\nexport class EmailPipe implements PipeTransform {\r\n transform(email: string, option: string = 'short') {\r\n if (!email) {\r\n return '';\r\n }\r\n\r\n const end = email.indexOf('@');\r\n if (end >= 0 && option.toLowerCase() === 'short') {\r\n return email.slice(0, end).trim();\r\n }\r\n\r\n // Simply return the email as-is if the parameter was anything esle\r\n // or we couldn't find an @ character\r\n return email;\r\n }\r\n}\r\n","export * from './phone-number.pipe';\r\nexport * from './church-unit.pipe';\r\nexport * from './middle-ellipsis.pipe';\r\nexport * from './sort.pipe';\r\nexport * from './student-listing.pipe';\r\nexport * from './mission-name.pipe';\r\nexport * from './email.pipe';\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'middleEllipsis'\r\n})\r\nexport class MiddleEllipsisPipe implements PipeTransform {\r\n\r\n transform(value: string, startEllipsIndex: number, terminateEllipsIndexFromEnd: number): any {\r\n if (value) {\r\n const endIndex = value.length - terminateEllipsIndexFromEnd;\r\n if (endIndex > 0) {\r\n const ellipsed = `${value.substring(0, startEllipsIndex)}..${value.substring(endIndex)}`;\r\n // there is the case that the ellipsed is the same size or larger than the original, avoid that\r\n if (ellipsed.length < value.length) {\r\n return ellipsed;\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'missionname'\r\n})\r\nexport class MissionNamePipe implements PipeTransform {\r\n transform(mission: string, ...args: any[]) {\r\n if (!mission) {\r\n return '';\r\n }\r\n\r\n const end = mission.toLowerCase().indexOf('mission');\r\n if (end >= 0) {\r\n return mission.slice(0, end).trim();\r\n }\r\n\r\n // we didn't change anything\r\n return mission;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'phoneNumber'\r\n})\r\nexport class PhoneNumberPipe implements PipeTransform {\r\n\r\n transform(value: string, args?: any): string {\r\n if (value) {\r\n // first, strip all non digits from the phone number\r\n const justDigits = value.replace(/\\D/g, '');\r\n // then try to make it match a full number\r\n const match = justDigits.match(/^\\d{10}$/);\r\n if (match && match.length > 0) {\r\n // then format it a standard way\r\n return `(${justDigits.substr(0, 3)}) ${justDigits.substr(3, 3)}-${justDigits.substr(6)}`;\r\n }\r\n }\r\n\r\n return value; // can't transform it\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { StudentListing } from '..';\r\n\r\n@Pipe({\r\n name: 'sort', pure: false\r\n})\r\nexport class SortPipe implements PipeTransform {\r\n value: string[] = [];\r\n\r\n static _orderByComparator(a: any, b: any): number {\r\n if (a === null || typeof a === 'undefined') {\r\n a = 0;\r\n }\r\n if (b === null || typeof b === 'undefined') {\r\n b = 0;\r\n }\r\n\r\n if (isNaN(parseFloat(a)) || !isFinite(a) || (isNaN(parseFloat(b)) || !isFinite(b))) {\r\n // Isn\"t a number so lowercase the string to properly compare\r\n a = a.toString();\r\n b = b.toString();\r\n if (a.toLowerCase() < b.toLowerCase()) {\r\n return -1;\r\n }\r\n if (a.toLowerCase() > b.toLowerCase()) {\r\n return 1;\r\n }\r\n } else {\r\n // Parse strings as numbers to compare properly\r\n if (parseFloat(a) < parseFloat(b)) {\r\n return -1;\r\n }\r\n if (parseFloat(a) > parseFloat(b)) {\r\n return 1;\r\n }\r\n }\r\n\r\n return 0; // equal each other\r\n }\r\n\r\n public transform(input: any, config = '+'): any {\r\n if (!input) {\r\n return input;\r\n }\r\n\r\n // make a copy of the input\"s reference\r\n this.value = [...input];\r\n const value = this.value;\r\n if (!Array.isArray(value)) {\r\n return value;\r\n }\r\n\r\n if (!Array.isArray(config) || (Array.isArray(config) && config.length === 1)) {\r\n const propertyToCheck: string = !Array.isArray(config) ? config : config[0];\r\n const desc = propertyToCheck.substr(0, 1) === '-';\r\n\r\n // Basic array\r\n if (!propertyToCheck || propertyToCheck === '-' || propertyToCheck === '+') {\r\n return !desc ? value.sort() : value.sort().reverse();\r\n } else {\r\n const property: string = propertyToCheck.substr(0, 1) === '+' || propertyToCheck.substr(0, 1) === '-' ? propertyToCheck.substr(1) : propertyToCheck;\r\n\r\n return value.sort(function(a: any, b: any) {\r\n let aValue = a[property];\r\n let bValue = b[property];\r\n\r\n const propertySplit = property.split('.');\r\n\r\n if (typeof aValue === 'undefined' && typeof bValue === 'undefined' && propertySplit.length > 1) {\r\n aValue = a;\r\n bValue = b;\r\n for (let j = 0; j < propertySplit.length; j++) {\r\n aValue = aValue[propertySplit[j]];\r\n bValue = bValue[propertySplit[j]];\r\n }\r\n }\r\n\r\n return !desc ? SortPipe._orderByComparator(aValue, bValue) : -SortPipe._orderByComparator(aValue, bValue);\r\n });\r\n }\r\n } else {\r\n // Loop over property of the array in order and sort\r\n return value.sort(function(a: any, b: any) {\r\n for (let i = 0; i < config.length; i++) {\r\n const desc = config[i].substr(0, 1) === '-';\r\n const property = config[i].substr(0, 1) === '+' || config[i].substr(0, 1) === '-' ? config[i].substr(1) : config[i];\r\n\r\n let aValue = a[property];\r\n let bValue = b[property];\r\n\r\n const propertySplit = property.split('.');\r\n\r\n if (typeof aValue === 'undefined' && typeof bValue === 'undefined' && propertySplit.length > 1) {\r\n aValue = a;\r\n bValue = b;\r\n for (let j = 0; j < propertySplit.length; j++) {\r\n aValue = aValue[propertySplit[j]];\r\n bValue = bValue[propertySplit[j]];\r\n }\r\n }\r\n\r\n const comparison = !desc ? SortPipe._orderByComparator(aValue, bValue) : -SortPipe._orderByComparator(aValue, bValue);\r\n\r\n // Don\"t return 0 yet in case of needing to sort by next property\r\n if (comparison !== 0) {\r\n return comparison;\r\n }\r\n }\r\n\r\n return 0; // equal each other\r\n });\r\n }\r\n }\r\n\r\n // transform(array: any[], field: string): any[] {\r\n // return array.sort((a, b) => a[field].toLowerCase() !== b[field].toLowerCase() ? a[field].toLowerCase() < b[field].toLowerCase() ? -1 : 1 : 0);\r\n // }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { StudentListing } from '../models';\r\n\r\n@Pipe({\r\n name: 'studentListing'\r\n})\r\nexport class StudentListingPipe implements PipeTransform {\r\n transform(student: StudentListing, args?: any): any {\r\n if (!student) {\r\n return '';\r\n }\r\n\r\n return `${student.lastName}, ${student.firstName}`;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Config, UnitLoginResult, UnitType, User } from '../models';\r\nimport { ApplicationRoles } from '../tokens/roles.tokens';\r\n\r\n@Injectable()\r\nexport class ConfigService {\r\n private configSubject = new BehaviorSubject(new Config());\r\n public config: Config;\r\n public config$ = this.configSubject.asObservable();\r\n\r\n constructor() {\r\n this.populate();\r\n }\r\n\r\n // populates the config; this runs once on application startup\r\n populate() {\r\n let config = window['wardsAndStakesConfig'];\r\n this.config = config;\r\n\r\n // if it's a logged in campus leader, set the account type so the system sees it as such\r\n if (config.unitType) {\r\n this.config.account_type = 'ByuiLeader';\r\n }\r\n\r\n // set the config (which will update the user service)\r\n this.configSubject.next(config); \r\n }\r\n\r\n setConfig(config: Config) {\r\n this.configSubject.next(config);\r\n this.config = config;\r\n }\r\n\r\n getConfig(): Config {\r\n return this.config;\r\n }\r\n\r\n hasByuiLeaderToken(): boolean {\r\n return this.config.account_type === 'ByuiLeader';\r\n }\r\n\r\n setByuiLeader(loginResult: UnitLoginResult) {\r\n if (loginResult && loginResult.unitId) {\r\n const user = new User();\r\n user.name = loginResult.name + ' ' + loginResult.unitType;\r\n user.roles = Array();\r\n user.email = loginResult.email;\r\n user.roles.push(ApplicationRoles.byuiLeader);\r\n\r\n this.configSubject.value.campusUnitId = loginResult.unitId;\r\n this.configSubject.value.unitType = loginResult.unitType;\r\n this.configSubject.value.account_type = 'ByuiLeader';\r\n this.configSubject.value.user = user;\r\n this.setConfig(this.configSubject.value);\r\n }\r\n }\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { of, throwError } from 'rxjs';\r\n\r\nexport abstract class AbstractDataService {\r\n /**\r\n * Look for a 404 and turn it into a NULL.\r\n */\r\n protected handleNotFound(error: HttpErrorResponse) {\r\n if (error.status === 404) {\r\n return of(null);\r\n }\r\n\r\n return throwError('Unable to load church unit.');\r\n }\r\n\r\n /**\r\n * Look for a 400+ error and if found, return the server's message; otherwise return the\r\n * generic message we get.\r\n */\r\n protected handleBadRequest(genericMessage: string = 'An error occurred') {\r\n return (error: HttpErrorResponse) => {\r\n if (error.status >= 400 && error.status < 500 && typeof error.error === 'string') {\r\n return throwError(error.error);\r\n }\r\n\r\n return throwError(genericMessage);\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { CampusUnitsFaqSection, CampusUnitsFaq } from '../../models';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class CampusUnitsCommunicationsDataService {\r\n private baseUrl = 'api/campus-units-communications';\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n // private handleLookUpError(error: HttpErrorResponse) {\r\n // if (error.status === 404) {\r\n // return Observable.of(null);\r\n // }\r\n // return new ErrorObservable('Unable to load data');\r\n // }\r\n\r\n getSections(): Observable {\r\n return this.http.get(`${this.baseUrl}/sections`);\r\n }\r\n\r\n updateSection(section: CampusUnitsFaqSection): Observable {\r\n return this.http.post(`${this.baseUrl}/update/section`, section);\r\n }\r\n\r\n updateQuestion(question: CampusUnitsFaq): Observable {\r\n return this.http.post(`${this.baseUrl}/update/question`, question);\r\n }\r\n\r\n updateSections(sections: CampusUnitsFaqSection[]): Observable {\r\n return this.http.post(`${this.baseUrl}/update/sections`, sections);\r\n }\r\n\r\n createSection(section: CampusUnitsFaqSection): Observable {\r\n return this.http.post(`${this.baseUrl}/create/section`, section);\r\n }\r\n\r\n createQuestion(question: CampusUnitsFaq): Observable {\r\n return this.http.post(`${this.baseUrl}/create/question`, question);\r\n }\r\n\r\n deleteQuestion(questionId: number) {\r\n return this.http.delete(`${this.baseUrl}/question/${questionId}`);\r\n }\r\n\r\n deleteSection(sectionId: number) {\r\n return this.http.delete(`${this.baseUrl}/section/${sectionId}`);\r\n // return this.http.post(`${this.baseUrl}/delete/section`, sectionId)\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { CampusUnitMessage } from '../../models/notifications/campus-unit-message.model';\r\nimport { catchError, retry } from 'rxjs/operators';\r\nimport { throwError } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class CampusUnitsMessageService {\r\n private baseUrl = 'api/campus-units-messages';\r\n\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n /**\r\n * Gets all messages\r\n */\r\n getAllMessages() {\r\n return this.httpClient.get(`${this.baseUrl}`) \r\n .pipe(\r\n retry(2),\r\n catchError(this.handleBadRequest('Unable to get messages'))\r\n );\r\n }\r\n\r\n /**\r\n * Returns a message with the specified id if found\r\n * @param messageId id\r\n */\r\n getMessage(messageId: number) {\r\n return this.httpClient.get(`${this.baseUrl}/${messageId}`)\r\n .pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Returns all active messages\r\n */\r\n getActiveMessages() {\r\n return this.httpClient.get(`${this.baseUrl}/active`);\r\n }\r\n\r\n /**\r\n * Create a new campus message\r\n */\r\n createMessage(newMessage: CampusUnitMessage) {\r\n return this.httpClient.post(`${this.baseUrl}/new`, newMessage)\r\n .pipe(catchError(this.handleBadRequest('Unable to create new message')));\r\n }\r\n\r\n /**\r\n * Update message\r\n * @param messageId id\r\n * @param updatedMessage new message\r\n */\r\n updateMessage(messageId: number, updatedMessage: CampusUnitMessage) {\r\n return this.httpClient.put(`${this.baseUrl}/${messageId}`, updatedMessage)\r\n .pipe(catchError(this.handleBadRequest('Unable to update message')));\r\n }\r\n\r\n\r\n handleBadRequest(genericMessage: string = 'An error occurred') {\r\n return (error: HttpErrorResponse) => {\r\n if (error.status >= 400 && error.status < 500 && typeof error.error === 'string') {\r\n return throwError(error.error);\r\n }\r\n return throwError(genericMessage);\r\n };\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n} from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n StudentListing,\r\n CampusWard,\r\n CampusWardDetails,\r\n LocalWard,\r\n HomeWardWithStudents,\r\n WardLeader,\r\n WardGroupAssignments,\r\n WardGroup,\r\n WardGroupType,\r\n MemberInfo,\r\n HomeWardWithCheckAbleStudents,\r\n CampusWardDetailsForUpdate,\r\n CampusUnitAccess,\r\n UnitLoginResult\r\n} from '../../models';\r\nimport { AbstractDataService } from './abstract-data-service';\r\nimport { catchError, retry } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class CampusWardsDataService extends AbstractDataService {\r\n private baseUrl = 'api/campus-units/wards';\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n /**\r\n * Gets the BYU-Idaho wards for single and married students.\r\n */\r\n getCampusWards(): Observable {\r\n return this.http.get(`${this.baseUrl}`)\r\n .pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the detailed information for the campus ward.\r\n */\r\n getCampusWardDetails(campusWardId: number): Observable {\r\n return this.http\r\n .get(`${this.baseUrl}/${campusWardId}`)\r\n .pipe(catchError(this.handleNotFound));\r\n }\r\n\r\n /**\r\n * Gets the detailed information for the campus ward.\r\n */\r\n getCampusWardDetailsForUpdate(campusWardId: number): Observable {\r\n return this.http\r\n .get(`${this.baseUrl}/for-update/${campusWardId}`)\r\n .pipe(catchError(this.handleNotFound));\r\n }\r\n\r\n /**\r\n * Gets the local wards that have been assigned to the campus ward.\r\n */\r\n getAssignedLocalWards(campusWardId: number): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/local-wards`\r\n );\r\n }\r\n\r\n /**\r\n * Update a campus ward's information, including meetings.\r\n */\r\n updateWardInformation(campusWardDetails: CampusWardDetailsForUpdate): Observable {\r\n return this.http\r\n .put(\r\n `${this.baseUrl}/${campusWardDetails.campusWardId}/information`,\r\n campusWardDetails\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update ward information.'))\r\n );\r\n }\r\n\r\n /**\r\n * Update a campus ward. This for when the admin is updating it.\r\n */\r\n updateCampusWard(\r\n campusWardDetails: CampusWardDetailsForUpdate\r\n ): Observable {\r\n return this.http\r\n .put(\r\n `${this.baseUrl}/${campusWardDetails.campusWardId}`,\r\n campusWardDetails\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update ward information.'))\r\n );\r\n }\r\n\r\n /**\r\n * Create a new campus ward.\r\n */\r\n createCampusWard(\r\n newCampusWardDetails: CampusWardDetailsForUpdate\r\n ): Observable {\r\n return this.http\r\n .post(`${this.baseUrl}`, newCampusWardDetails)\r\n .pipe(catchError(this.handleBadRequest('Unable to create new ward.')));\r\n }\r\n\r\n /**\r\n * Deletes, to the user at least, (really inactivates) a campus ward.\r\n */\r\n deleteCampusWard(campusWardId: number) {\r\n return this.http.delete(`${this.baseUrl}/${campusWardId}`);\r\n }\r\n\r\n /**\r\n * Creates the ward leader's information, including the photograph.\r\n *\r\n * @param leader The leader's information\r\n * @param photo The leader's new photo, if any\r\n */\r\n createWardLeader(leader: WardLeader, photo: File): Observable {\r\n const formData = this.getLeaderFormData(Object.assign({}, leader), photo);\r\n return this.http.post(`${this.baseUrl}/${leader.campusWardId}/leaders`, formData)\r\n .pipe(\r\n catchError(\r\n this.handleBadRequest('Unable to update ward leader information.')\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Updates the ward leader's information, including the photograph.\r\n *\r\n * @param leader The leader's information\r\n * @param photo The leader's new photo, if any\r\n * @param removePhoto A flag letting us know if we want to remove the leader's current photo or not. This will trump the new photo.\r\n */\r\n updateWardLeader(leader: WardLeader, photo: File, removePhoto: boolean): Observable {\r\n const updateModel = Object.assign({ deleteExistingPhoto: false }, leader);\r\n updateModel.photoBase64 = null; // clear this out to just reduce data going over the wire\r\n\r\n if (removePhoto) {\r\n updateModel.deleteExistingPhoto = true;\r\n }\r\n\r\n const formData = this.getLeaderFormData(updateModel, photo);\r\n\r\n return this.http.put(`${this.baseUrl}/${leader.campusWardId}/leaders/${\r\n leader.campusWardOfficeId\r\n }`,\r\n formData\r\n )\r\n .pipe(\r\n catchError(\r\n this.handleBadRequest('Unable to update ward leader information.')\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Deletes the ward leader's information.\r\n */\r\n deleteWardLeader(leader: WardLeader) {\r\n return this.http.delete(\r\n `${this.baseUrl}/${leader.campusWardId}/leaders/${\r\n leader.campusWardOfficeId\r\n }`\r\n );\r\n }\r\n\r\n /**\r\n * Get students attending to ward assigned to a campus ward.\r\n */\r\n getPossibleLocalStudents(\r\n campusWardId: number\r\n ): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/possible-local-students`\r\n );\r\n }\r\n\r\n /**\r\n * Get students attending to ward assigned to a campus ward.\r\n */\r\n getPossibleCheckableLocalStudents(\r\n campusWardId: number\r\n ): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/possible-local-students`\r\n );\r\n }\r\n\r\n /**\r\n * Gets the local students assigned/attending the ward.\r\n */\r\n getLocalStudents(\r\n campusWardId: number,\r\n groupTypeId: number\r\n ): Observable {\r\n return this.http.get(\r\n `${\r\n this.baseUrl\r\n }/${campusWardId}/local-students?campusWardGroupTypeId=${groupTypeId}`\r\n );\r\n }\r\n\r\n /**\r\n * Updates students campus ward information\r\n *\r\n * @param students The students being updated\r\n * @param campusWard The ward we're updating for\r\n * @param remove Whether or not we're removing assignments\r\n */\r\n updateStudentsCampusWard(\r\n students: StudentListing[],\r\n campusWard: CampusWard,\r\n remove: boolean\r\n ) {\r\n const info = {\r\n campusWardUnitNumber: campusWard.unitNumber,\r\n students: students,\r\n removeAssignments: remove\r\n };\r\n return this.http.post(\r\n `${this.baseUrl}/${campusWard.campusWardId}/local-students`,\r\n info\r\n );\r\n }\r\n\r\n /**\r\n * Gets the valid ward group types.\r\n */\r\n getWardGroupTypes(): Observable {\r\n return this.http\r\n .get(`api/campus-units/ward-group-types`)\r\n .pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the ward's active groups.\r\n */\r\n getWardGroups(campusWardId: number): Observable {\r\n return this.http.get(`${this.baseUrl}/${campusWardId}/groups`);\r\n }\r\n\r\n /**\r\n * Gets the ward's active groups.\r\n */\r\n getWardGroupsOfType(\r\n campusWardId: number,\r\n groupTypeId: number\r\n ): Observable {\r\n return this.http.get(\r\n `${\r\n this.baseUrl\r\n }/${campusWardId}/groups?campusWardGroupTypeId=${groupTypeId}&activeOnly=true`\r\n );\r\n }\r\n\r\n /**\r\n * Creates the ward group.\r\n */\r\n createWardGroup(group: WardGroup): Observable {\r\n return this.http.post(`${this.baseUrl}/${group.campusWardId}/groups`, group)\r\n .pipe(catchError(this.handleBadRequest('Unable to create group.')));\r\n }\r\n\r\n /**\r\n * Updates stake info\r\n */\r\n updateWardGroup(group: WardGroup) {\r\n return this.http\r\n .put(\r\n `${this.baseUrl}/${group.campusWardId}/groups/${\r\n group.campusWardGroupId\r\n }`,\r\n group\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update group information.'))\r\n );\r\n }\r\n\r\n /**\r\n * Gets the ward's group assignments for the given semester and group type.\r\n */\r\n getWardGroupAssignments(\r\n campusWardId: number,\r\n groupTypeId: number,\r\n year: number,\r\n session: string\r\n ): Observable {\r\n const url = `${\r\n this.baseUrl\r\n }/${campusWardId}/groups/assignments?campusWardGroupTypeId=${groupTypeId}&year=${year}&session=${session}`;\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Updates the ward's group assignments for the given semester and group type.\r\n */\r\n rollWardGroupAssignments(\r\n campusWardId: number,\r\n groupTypeId: number,\r\n year: number,\r\n session: string\r\n ): Observable {\r\n const url = `${this.baseUrl}/${campusWardId}/groups/rolled-assignments`;\r\n const information = {\r\n campusWardId: campusWardId,\r\n campusWardGroupTypeId: groupTypeId,\r\n session: session,\r\n year: year\r\n };\r\n\r\n return this.http.post(url, information);\r\n }\r\n\r\n /**\r\n * Updates the ward's group assignments for the given semester and group type.\r\n */\r\n updateWardGroupAssignments(\r\n assignments: WardGroupAssignments\r\n ): Observable {\r\n const url = `${this.baseUrl}/${\r\n assignments.campusWardId\r\n }/groups/assignments`;\r\n return this.http.put(url, assignments);\r\n }\r\n\r\n /**\r\n * Removes the ward group assignments.\r\n */\r\n removeWardGroupAssignments(\r\n campusWardId: number,\r\n campusWardGroupAssignmentIds: number[]\r\n ) {\r\n return this.http.post(\r\n `${this.baseUrl}/${campusWardId}/groups/assignment-removals`,\r\n campusWardGroupAssignmentIds\r\n );\r\n }\r\n\r\n /**\r\n * Gets the form data to use to create or update a leader's information.\r\n *\r\n * @param model The model to send as json with the leader's information\r\n * @param photo The leader's photo\r\n */\r\n private getLeaderFormData(model: any, photo: File): FormData {\r\n const formData = new FormData();\r\n formData.append('leaderInformationJson', JSON.stringify(model));\r\n if (photo) {\r\n formData.append('newPhoto', photo, photo.name);\r\n }\r\n\r\n return formData;\r\n }\r\n\r\n /**\r\n * Gets campus ward directory\r\n *\r\n * @param campusWardId\r\n * @param term\r\n * @param wardDirectoryParams\r\n */\r\n getCampusWardDirectory(\r\n campusWardId: number,\r\n term: string,\r\n year: number,\r\n excludeNonAttendingLocalStudents = false,\r\n loadOnlyBasicData = false\r\n ): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/term/${term}/year/${year}/WardDirectory?excludeNonAttendingLocalStudents=${excludeNonAttendingLocalStudents}&loadOnlyBasicData=${loadOnlyBasicData}`\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current campus ward directory\r\n * @param campusWardId\r\n */\r\n getCurrentCampusWardDirectory(\r\n campusWardId: number,\r\n ): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/dir/current`\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current campus ward directory\r\n * with only mimimal student information\r\n * @param campusWardId\r\n */\r\n getCurrentBasicCampusWardDirectory(\r\n campusWardId: number,\r\n ): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${campusWardId}/dir/current/basic`\r\n );\r\n }\r\n\r\n /**\r\n * Ward leader login\r\n *\r\n * @param campusWard\r\n */\r\n unitLogIn(campusWard: CampusUnitAccess) {\r\n return this.http\r\n .post(`${this.baseUrl}/logIn`, campusWard)\r\n .pipe(catchError(this.handleBadRequest('Leader not authorized.')));\r\n }\r\n\r\n /**\r\n * Gets the BYU-Idaho wards for single and married students.\r\n */\r\n getCampusWardById(wardId: number): Observable {\r\n return this.http.get(`${this.baseUrl}/${wardId}`)\r\n .pipe(\r\n retry(2)\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n CampusUnits,\r\n ChurchUnit,\r\n CampusStakeDetails,\r\n CampusWard,\r\n LocalWard,\r\n LocalWardAssignment,\r\n NewLocalWard,\r\n CampusStake,\r\n StakeLeader,\r\n CampusUnitAccess,\r\n CampusStakeDetailsForUpdate,\r\n UnitLoginResult\r\n} from '../../models';\r\nimport { AbstractDataService } from './abstract-data-service';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, retry } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class ChurchUnitsDataService extends AbstractDataService {\r\n private campusUnitsUrl = 'api/campus-units';\r\n private stakesUrl = 'api/campus-units/stakes';\r\n private churchUnitsUrl = 'api/church-units';\r\n private wardsUrl = 'api/campus-units/wards';\r\n\r\n // we aren't going to cache the campus wards, stakes, and \"local\" wards (those assigned to campus wards)\r\n // because these are actually likely to change (since this system is where their information gets changed)\r\n\r\n constructor(private http: HttpClient) {\r\n super();\r\n }\r\n\r\n /**\r\n * Gets the campus wards, stakes, and local wards assigned to campus wards for BYU-Idaho.\r\n */\r\n getCampusUnits(): Observable {\r\n return this.http.get(`${this.campusUnitsUrl}`).pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the church unit by the specified unit number.\r\n */\r\n getChurchUnit(unitNumber: string): Observable {\r\n return this.http\r\n .get(`api/church-units/${unitNumber}`)\r\n .pipe(catchError(this.handleNotFound));\r\n }\r\n\r\n /**\r\n * Gets all of the campus stakes.\r\n */\r\n getCampusStakes(): Observable {\r\n return this.http.get(`${this.stakesUrl}`).pipe(\r\n retry(2));\r\n }\r\n\r\n getCampusWards(): Observable {\r\n return this.http.get(`${this.wardsUrl}`).pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the wards that belong to the stake.\r\n */\r\n getStakeWards(campusStakeId: number): Observable {\r\n return this.http.get(\r\n `${this.stakesUrl}/${campusStakeId}/wards`\r\n );\r\n }\r\n\r\n /**\r\n * Gets the detailed information for the campus stake.\r\n */\r\n getCampusStakeDetails(campusStakeId: number): Observable {\r\n return this.http\r\n .get(`${this.stakesUrl}/${campusStakeId}`)\r\n .pipe(catchError(this.handleNotFound));\r\n }\r\n\r\n /**\r\n * Gets the detailed information for the campus stake, including information that only can be seen and updated for an update.\r\n */\r\n getCampusStakeDetailsForUpdate(campusStakeId: number): Observable {\r\n return this.http\r\n .get(`${this.stakesUrl}/for-update/${campusStakeId}`)\r\n .pipe(catchError(this.handleNotFound));\r\n }\r\n\r\n /**\r\n * Gets the South-East Idaho wards that can be assigned to campus singles wards.\r\n */\r\n getLocalWards(): Observable {\r\n return this.http\r\n .get(`${this.campusUnitsUrl}/local-wards`)\r\n .pipe(\r\n retry(2)\r\n );\r\n }\r\n\r\n /**\r\n * Gets the South-East Idaho ward (that's assigned to a campus ward) by its assignment's primary key.\r\n */\r\n getLocalWard(campusHomeWardId: number): Observable {\r\n return this.http.get(\r\n `${this.campusUnitsUrl}/local-wards/${campusHomeWardId}`\r\n );\r\n }\r\n\r\n /**\r\n * Creates a new local ward assignment.\r\n */\r\n createLocalWardAssignment(campusWardId: number, unitNumber: string): Observable {\r\n return this.http.post(`${this.campusUnitsUrl}/local-wards/assignments`,\r\n new NewLocalWard(campusWardId, unitNumber)\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to create new assignment'))\r\n );\r\n }\r\n\r\n /**\r\n * Updates the ward assigned to the local wards.\r\n */\r\n updateLocalWardAssignment(campusWardId: number, campusHomeWardIds: number[]) {\r\n return this.http\r\n .put(\r\n `${this.campusUnitsUrl}/local-wards/assignments`,\r\n new LocalWardAssignment(campusHomeWardIds, campusWardId)\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update ward assignments'))\r\n );\r\n }\r\n\r\n /**\r\n * Clears the ward assigned to the local wards.\r\n */\r\n removeLocalWardAssignment(campusHomeWardIds: number[]) {\r\n // same API to clear, just don't pass a ward\r\n return this.http\r\n .put(\r\n `${this.campusUnitsUrl}/local-wards/assignments`,\r\n new LocalWardAssignment(campusHomeWardIds)\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to remove ward assignments'))\r\n );\r\n }\r\n\r\n /**\r\n * Create a new campus ward.\r\n */\r\n createCampusStake(newCampusStakeDetails: CampusStakeDetailsForUpdate): Observable {\r\n return this.http\r\n .post(`${this.stakesUrl}`, newCampusStakeDetails)\r\n .pipe(catchError(this.handleBadRequest('Unable to create a new stake.')));\r\n }\r\n\r\n /**\r\n * Creates the stake leader's information, including the photograph.\r\n *\r\n * @param leader The leader's information\r\n * @param photo The leader's new photo, if any\r\n */\r\n createStakeLeader(leader: StakeLeader, photo: File): Observable {\r\n const formData = this.getLeaderFormData(Object.assign({}, leader), photo);\r\n return this.http.post(`${this.stakesUrl}/${leader.campusStakeId}/leaders`, formData)\r\n .pipe(\r\n catchError(\r\n this.handleBadRequest('Unable to update stake leader information.')\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Updates the stake leader's information, including the photograph.\r\n *\r\n * @param leader The leader's information\r\n * @param photo The leader's new photo, if any\r\n * @param removePhoto A flag letting us know if we want to remove the leader's current photo or not. This will trump the new photo.\r\n */\r\n updateStakeLeader(leader: StakeLeader, photo: File, removePhoto: boolean): Observable {\r\n const updateModel = Object.assign({ deleteExistingPhoto: false }, leader);\r\n updateModel.photoBase64 = null; // clear this out to just reduce data going over the wire\r\n\r\n if (removePhoto) {\r\n updateModel.deleteExistingPhoto = true;\r\n }\r\n\r\n const formData = this.getLeaderFormData(updateModel, photo);\r\n return this.http.put(`${this.stakesUrl}/${leader.campusStakeId}/leaders/${\r\n leader.campusStakeOfficeId\r\n }`,\r\n formData\r\n )\r\n .pipe(\r\n catchError(\r\n this.handleBadRequest('Unable to update stake leader information.')\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Deletes the stake leader's information.\r\n */\r\n deleteStakeLeader(leader: StakeLeader) {\r\n return this.http.delete(\r\n `${this.stakesUrl}/${leader.campusStakeId}/leaders/${\r\n leader.campusStakeOfficeId\r\n }`\r\n );\r\n }\r\n\r\n /**\r\n * Update a campus stake's information.\r\n */\r\n updateStakeInformation(campusStakeDetails: CampusStakeDetailsForUpdate): Observable {\r\n return this.http.put(`${this.stakesUrl}/${campusStakeDetails.campusStakeId}/information`,\r\n campusStakeDetails\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update stake information.'))\r\n );\r\n }\r\n\r\n /**\r\n * Updates stake info\r\n */\r\n updateCampusStake(campusStakeDetails: CampusStakeDetailsForUpdate): Observable {\r\n return this.http.put(`${this.stakesUrl}/${campusStakeDetails.campusStakeId}`,\r\n campusStakeDetails\r\n )\r\n .pipe(\r\n catchError(this.handleBadRequest('Unable to update stake information.'))\r\n );\r\n }\r\n\r\n /**\r\n * \"Deletes\" campus stake\r\n */\r\n deleteCampusStake(campusStakeId: number) {\r\n return this.http.delete(`${this.stakesUrl}/${campusStakeId}`);\r\n }\r\n\r\n /**\r\n * Gets the form data to use to create or update a leader's information.\r\n *\r\n * @param model The model to send as json with the leader's information\r\n * @param photo The leader's photo\r\n */\r\n private getLeaderFormData(model: any, photo: File): FormData {\r\n const formData = new FormData();\r\n formData.append('leaderInformationJson', JSON.stringify(model));\r\n if (photo) {\r\n formData.append('newPhoto', photo, photo.name);\r\n }\r\n\r\n return formData;\r\n }\r\n\r\n /**\r\n * Campus unit login\r\n */\r\n unitLogIn(campusWard: CampusUnitAccess) {\r\n return this.http\r\n .post(`${this.churchUnitsUrl}/login`, campusWard)\r\n .pipe(catchError(this.handleBadRequest('Leader not authorized.')));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { ApprovedHousingComplex, AcademicSession, CampusWardSessionInformation, AddressWardAssignment, ApprovedAddress } from '../../models';\r\nimport { ApprovedHousingSessionInformation } from '../../index';\r\nimport { Observable, of } from 'rxjs';\r\nimport { retry, tap } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class HousingDataService {\r\n private baseUrl = 'api/approved-housing';\r\n private wardAddressesUrl = 'api/campus-units/wards';\r\n\r\n // We want to cache the housing complexes because they're unlikely to change while the user is in the system\r\n private cachedHousingComplexes: ApprovedHousingComplex[] = null;\r\n\r\n // We want to cache the sessions because they're unlikely to change while the user is in the system\r\n private cachedSessions: AcademicSession[];\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Gets the current approved housing complexes. Uses our cache if already cached, otherwise goes to the server\r\n * (where it will retry up to two times).\r\n */\r\n getCurrentApprovedHousingComplexes(): Observable {\r\n if (this.cachedHousingComplexes != null) {\r\n return of(this.cachedHousingComplexes);\r\n }\r\n\r\n return this.http\r\n .get(`${this.baseUrl}/complexes`)\r\n .pipe(\r\n retry(2),\r\n tap(complexes => (this.cachedHousingComplexes = complexes))\r\n );\r\n }\r\n\r\n /**\r\n * Gets the academic sessions that you can use to search for wards based on approved housing.\r\n * Uses our cache if already cached, otherwise goes to the server (where it will retry up to two times).\r\n */\r\n getAcademicSessions(): Observable {\r\n if (this.cachedSessions != null) {\r\n return of(this.cachedSessions);\r\n }\r\n\r\n return this.http\r\n .get(`${this.baseUrl}/sessions`)\r\n .pipe(\r\n retry(2),\r\n tap(sessions => (this.cachedSessions = sessions))\r\n );\r\n }\r\n\r\n /**\r\n * Gets the wards and addresses assigned to those wards for the complex and session.\r\n */\r\n getCampusWardSessionInformation(complexId: number, sessionNumber: number): Observable {\r\n const params = new HttpParams().set('sessionNumber', `${sessionNumber}`);\r\n\r\n return this.http.get(`${this.baseUrl}/complexes/${complexId}/wards`, {\r\n params: params\r\n });\r\n }\r\n\r\n /**\r\n * Gets the housing complexes and addresses assigned to the campus ward for the given session.\r\n */\r\n getHousingComplexSessionInformation(campusWardId: number, sessionNumber: number, wardGroupTypeId?: number): Observable {\r\n let url = `${this.wardAddressesUrl}/${campusWardId}/sessions/${sessionNumber}/addresses`;\r\n if (wardGroupTypeId) {\r\n url = `${url}?campusWardGroupTypeId=${wardGroupTypeId}`;\r\n }\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Updates the ward assigned to the addresses for the semester.\r\n */\r\n updateWardAssignment(campusWardId: number, sessionNumber: number, addresses: string[]) {\r\n return this.http.put(`${this.baseUrl}/address-ward-assignments`, new AddressWardAssignment(addresses, sessionNumber, campusWardId));\r\n }\r\n\r\n /**\r\n * Clears the ward assigned to the addresses for the semester.\r\n */\r\n removeWardAssignment(sessionNumber: number, addresses: string[]) {\r\n // same API to clear, just don't pass a ward\r\n return this.http.put(`${this.baseUrl}/address-ward-assignments`, new AddressWardAssignment(addresses, sessionNumber));\r\n }\r\n\r\n /**\r\n * Gets the assigned approved addresses for the ward\r\n * @param campusWardId WardId\r\n * @param session Semester\r\n */\r\n getAssignedApprovedWardAddresses(campusWardId: number, session: number): Observable {\r\n const url = `${this.baseUrl}/${campusWardId}/term/${session}/AssignedAddresses`;\r\n return this.http.get(url);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpErrorResponse\r\n} from '@angular/common/http';\r\nimport { Student, HomeUnitChange, ChurchUnit } from '../../models';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class StudentsDataService {\r\n private baseUrl = 'api/students';\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n /**\r\n * Look for a 404 and turn it into a NULL.\r\n */\r\n private handleLookupError(error: HttpErrorResponse) {\r\n if (error.status === 404) {\r\n return of(null);\r\n }\r\n\r\n return throwError('Unable to load student');\r\n }\r\n\r\n /**\r\n * Gets the student based on the I-Number or BYU-I Email address.\r\n */\r\n getStudent(iNumberOrEmail: string): Observable {\r\n return this.http\r\n .get(`${this.baseUrl}/${iNumberOrEmail}`)\r\n .pipe(catchError(this.handleLookupError));\r\n }\r\n\r\n /**\r\n * Gets the home unit change histories for the given student.\r\n */\r\n getHomeUnitChanges(iNumber: string): Observable {\r\n return this.http.get(\r\n `${this.baseUrl}/${iNumber}/home-unit-histories`\r\n );\r\n }\r\n\r\n /**\r\n * Updates the person's home unit.\r\n */\r\n updateHomeUnit(iNumber: string, churchUnit: ChurchUnit) {\r\n return this.http.put(`${this.baseUrl}/${iNumber}/home-unit`, {\r\n unitNumber: churchUnit.unitNumber\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { EmailRequest } from '../models/communications/email-request.model';\r\n\r\n@Injectable()\r\nexport class EmailService {\r\n private baseUrl = 'api/email'\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n public sendEmail(emailRequest: EmailRequest): Observable {\r\n return this.http.post(`${this.baseUrl}/send-to-many`, emailRequest)\r\n .pipe(catchError(this.handleBadRequest('Unable to send email(s)')));\r\n }\r\n\r\n handleBadRequest(genericMessage: string = 'An error occurred') {\r\n return (error: HttpErrorResponse) => {\r\n if (error.status >= 400 && error.status < 500 && typeof error.error === 'string') {\r\n return throwError(error.error);\r\n }\r\n return throwError(genericMessage);\r\n };\r\n }\r\n\r\n}\r\n\r\n\r\n","export * from './config.service';\r\nexport * from './user.service';\r\nexport * from './data/housing-data.service';\r\nexport * from './data/church-units-data.service';\r\nexport * from './sort.service';\r\nexport * from './data/students-data.service';\r\nexport * from './navigation.service';\r\nexport * from './data/campus-wards-data.service';\r\nexport * from './data/campus-units-communications-data.service';\r\nexport * from './data/campus-units-message.service';\r\nexport * from './email.service';\r\n","import { Injectable, OnInit, OnDestroy } from '@angular/core';\r\nimport { UserService } from './user.service';\r\nimport { UnitType, User, CampusUnit } from '../models';\r\nimport * as Security from '../tokens/roles.tokens';\r\nimport { Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Injectable()\r\nexport class NavigationService implements OnDestroy {\r\n byuiUser: User = null;\r\n proxiedUnit: CampusUnit = null;\r\n ldsAccount: any = null;\r\n\r\n private userSubscription: Subscription;\r\n private proxyUnitSubscription: Subscription;\r\n\r\n constructor(private userService: UserService, private router: Router) {\r\n this.userSubscription = this.userService.user.subscribe(\r\n user => (this.byuiUser = user)\r\n );\r\n this.proxyUnitSubscription = this.userService.proxyUnit.subscribe(\r\n unit => (this.proxiedUnit = unit)\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.userSubscription.unsubscribe();\r\n this.proxyUnitSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * Tells you if we have a BYU-Idaho Account or LDS Account already logged in.\r\n */\r\n alreadyLoggedIn(): boolean {\r\n return this.byuiUser != null;\r\n }\r\n\r\n unsubscribeUser() {\r\n this.byuiUser = null;\r\n }\r\n\r\n /**\r\n * Tells you if we have a BYU-Idaho Account or LDS Account already logged in THAT HAS PERMISSIONS TO ACTUALLY DO\r\n * THINGS IN THE APPLICATION. You could have someone logged in that can't do anything.\r\n */\r\n loggedInAsValidUser(): boolean {\r\n return (\r\n this.loggedInAsWard() ||\r\n this.loggedInAsStake() ||\r\n this.loggedInAsAdmin() ||\r\n this.loggedInAsLeader()\r\n );\r\n }\r\n\r\n /**\r\n * Tells you whether or not the user is logged in as an LDS Account for a ward.\r\n */\r\n loggedInAsWard(): boolean {\r\n if (this.proxiedUnit !== null) {\r\n return this.proxiedUnit.unitType === UnitType.Ward;\r\n }\r\n return false;\r\n // TODO get this from user\r\n }\r\n\r\n /**\r\n * Tells you whether or not the user is logged in as an LDS Account for a stake.\r\n */\r\n loggedInAsStake(): boolean {\r\n if (this.proxiedUnit !== null) {\r\n return this.proxiedUnit.unitType === UnitType.Stake;\r\n }\r\n return false;\r\n // TODO get this from user\r\n }\r\n\r\n /**\r\n * Tells you whether or not the user is logged in as BYU-Idaho Administrator.\r\n */\r\n loggedInAsAdmin(): boolean {\r\n return (\r\n this.byuiUser != null &&\r\n this.userService.userHasRole([Security.ApplicationRoles.byuiAdmin])\r\n );\r\n }\r\n\r\n /**\r\n * Tells you whether or not the user is proxied in for a stake.\r\n */\r\n proxiedForStake(): boolean {\r\n return this.proxiedUnit && this.proxiedUnit.unitType === UnitType.Stake;\r\n }\r\n\r\n /**\r\n * Whether or not the user is proxied for a singles ward or stake.\r\n */\r\n proxiedForSinglesUnit(): boolean {\r\n if (this.proxiedUnit) {\r\n return !this.proxiedUnit.isForMarriedStudents;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Stops proxying for a campus unit.\r\n */\r\n stopUnitProxying() {\r\n this.userService.setProxyStake(null);\r\n this.userService.setProxyWard(null);\r\n this.router.navigate(['admin/proxy']);\r\n }\r\n\r\n /**\r\n * Tells whether or not user is logged in as BYU-I Leader\r\n */\r\n loggedInAsLeader(): boolean {\r\n return (\r\n this.byuiUser != null &&\r\n this.userService.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n );\r\n }\r\n\r\n loggedInAsAuthorized(): boolean {\r\n return this.loggedInAsAdmin() || this.loggedInAsLeader();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ApprovedHousingComplex,\r\n CampusWardSessionInformation,\r\n LocalWard,\r\n CampusWard,\r\n CampusStake,\r\n AcademicSession,\r\n WardMeeting,\r\n CampusUnit,\r\n ChurchUnit,\r\n WardGroupType,\r\n WardGroup,\r\n StudentListing,\r\n HomeWardWithStudents,\r\n MemberInfo,\r\n CampusUnitsFaqSection,\r\n HomeWardWithCheckAbleStudents,\r\n CheckableStudentListing\r\n} from '../models';\r\nimport { ApprovedHousingSessionInformation } from '../index';\r\nimport { SortableChurchUnit } from '../models/ecclesiastical/sortable-church-unit.model';\r\n\r\n@Injectable()\r\nexport class SortService {\r\n constructor() { }\r\n\r\n /**\r\n * Sorts two ward meetings, based on their order.\r\n */\r\n sortWardMeetingsAsc(meeting1: WardMeeting, meeting2: WardMeeting) {\r\n if (meeting1.sortOrder !== undefined && meeting2.sortOrder !== undefined) {\r\n return meeting1.sortOrder - meeting2.sortOrder;\r\n }\r\n\r\n if (!meeting1.sortOrder && !meeting2.sortOrder) {\r\n return meeting1.meetingType.description\r\n .toUpperCase()\r\n .localeCompare(meeting2.meetingType.description.toUpperCase());\r\n }\r\n\r\n return 1;\r\n }\r\n\r\n /**\r\n * Compares two housing complexes and sorts them ascending.\r\n */\r\n sortHousingComplexesAsc(\r\n complex1: ApprovedHousingComplex,\r\n complex2: ApprovedHousingComplex\r\n ) {\r\n return complex1.name\r\n .toUpperCase()\r\n .localeCompare(complex2.name.toUpperCase());\r\n }\r\n\r\n /**\r\n * Compares two housing complex/semester informations.\r\n */\r\n sortApprovedHousingSessionInformationAsc(\r\n info1: ApprovedHousingSessionInformation,\r\n info2: ApprovedHousingSessionInformation\r\n ): number {\r\n return info1.housingComplex\r\n .toUpperCase()\r\n .localeCompare(info2.housingComplex.toUpperCase());\r\n }\r\n\r\n /**\r\n * Sorts the church units, ascending.\r\n */\r\n sortChurchUnitsAsc(\r\n unit1: SortableChurchUnit,\r\n unit2: SortableChurchUnit\r\n ): number {\r\n return sortChurchUnitAsc(\r\n unit1.sortName,\r\n unit1.sortNumber,\r\n unit2.sortName,\r\n unit2.sortNumber\r\n );\r\n }\r\n\r\n /**\r\n * Compares two ward/semester informations.\r\n */\r\n sortCampusWardSessionInformationsAsc(\r\n info1: CampusWardSessionInformation,\r\n info2: CampusWardSessionInformation\r\n ): number {\r\n return sortChurchUnitAsc(\r\n info1.campusWard.sortName,\r\n info1.campusWard.sortNumber,\r\n info2.campusWard.sortName,\r\n info2.campusWard.sortNumber\r\n );\r\n }\r\n\r\n /**\r\n * Compares two local wards based on their name.\r\n */\r\n sortLocalWardsAsc(ward1: LocalWard, ward2: LocalWard): number {\r\n return sortChurchUnitAsc(\r\n ward1.localUnit.sortName,\r\n ward1.localUnit.sortNumber,\r\n ward2.localUnit.sortName,\r\n ward2.localUnit.sortNumber\r\n );\r\n }\r\n\r\n sortFaqSections(s1: CampusUnitsFaqSection, s2: CampusUnitsFaqSection) {\r\n return s1.name.toUpperCase().localeCompare(s2.name.toUpperCase());\r\n }\r\n\r\n /**\r\n * Compares two academic sessions based on their begin dates. If I need to do this again, refactor it so that the\r\n * method can be shared.\r\n */\r\n sortAcademicSessionsAsc(\r\n session1: AcademicSession,\r\n session2: AcademicSession\r\n ): number {\r\n if (session1.beginDate > session2.beginDate) {\r\n return 1;\r\n }\r\n\r\n if (session1.beginDate === session2.beginDate) {\r\n return 0;\r\n }\r\n\r\n return -1;\r\n }\r\n\r\n /**\r\n * Sorts two student listings alphabetically, lastname, then first name.\r\n */\r\n sortStudentListingsAsc(student1: StudentListing, student2: StudentListing) {\r\n let compared = student1.lastName\r\n .toUpperCase()\r\n .localeCompare(student2.lastName.toUpperCase());\r\n if (compared === 0) {\r\n compared = student1.firstName\r\n .toUpperCase()\r\n .localeCompare(student2.firstName.toUpperCase());\r\n }\r\n\r\n return compared;\r\n }\r\n\r\n /**\r\n * Sorts two checkable student listings alphabetically, lastname, then first name.\r\n */\r\n sortCheckableStudentListingsAsc(\r\n student1: CheckableStudentListing,\r\n student2: CheckableStudentListing\r\n ) {\r\n let compared = student1.lastName\r\n .toUpperCase()\r\n .localeCompare(student2.lastName.toUpperCase());\r\n if (compared === 0) {\r\n compared = student1.firstName\r\n .toUpperCase()\r\n .localeCompare(student2.firstName.toUpperCase());\r\n }\r\n\r\n return compared;\r\n }\r\n\r\n /**\r\n * Sort 2 members or the ward directory.\r\n */\r\n sortWardDirectoryByLastName(member1: MemberInfo, member2: MemberInfo) {\r\n let compared = member1.lastName\r\n .toUpperCase()\r\n .localeCompare(member2.lastName.toUpperCase());\r\n if (compared === 0) {\r\n compared = member1.firstName\r\n .toUpperCase()\r\n .localeCompare(member2.firstName.toUpperCase());\r\n }\r\n return compared;\r\n }\r\n\r\n sortWardDirectoryByAddress(member1: MemberInfo, member2: MemberInfo) {\r\n return member1.address\r\n .toUpperCase()\r\n .localeCompare(member2.address.toUpperCase());\r\n }\r\n\r\n /**\r\n * Sorts the ward group types ascending, based on name.\r\n */\r\n sortWardGroupTypesAsc(type1: WardGroupType, type2: WardGroupType): number {\r\n const test = type1.name.toUpperCase().localeCompare(type2.name.toUpperCase());\r\n return type1.name.toUpperCase().localeCompare(type2.name.toUpperCase());\r\n }\r\n\r\n /**\r\n * Sorts the ward groups ascending, based on name. If there's a number in the name and the two other parts\r\n * of the name are the same, we'll sort based on the number.\r\n */\r\n sortWardGroupsAsc(group1: WardGroup, group2: WardGroup): number {\r\n // often they'll have numbers in their groups, so we'll try to find the number and if all the non-number\r\n // stuff is the same, we'll sort by the numbers\r\n // /^(\\D*)(\\d*)(.*)$/g\r\n const regex1 = /^(\\D*)(\\d*)$/g;\r\n const regex2 = /^(\\D*)(\\d*)$/g;\r\n const group1Match = regex1.exec(group1.name);\r\n const group2Match = regex2.exec(group2.name);\r\n\r\n // in case regrex doesnt match\r\n if (group1Match !== null && group2Match !== null) {\r\n if (group1Match.length === 3 && group2Match.length === 3) {\r\n let compared = group1Match[1]\r\n .toUpperCase()\r\n .localeCompare(group2Match[1].toUpperCase());\r\n if (compared === 0) {\r\n compared = +group1Match[2] - +group2Match[2];\r\n }\r\n return compared;\r\n }\r\n }\r\n return group1.name.toUpperCase().localeCompare(group2.name.toUpperCase());\r\n }\r\n\r\n /**\r\n * Sorts the home ward with students by the ward.\r\n */\r\n sortHomeWardWithStudentsAsc(\r\n one: HomeWardWithStudents,\r\n two: HomeWardWithStudents\r\n ) {\r\n return sortChurchUnitAsc(\r\n one.homeWard.sortName,\r\n one.homeWard.sortNumber,\r\n two.homeWard.sortName,\r\n two.homeWard.sortNumber\r\n );\r\n }\r\n /**\r\n * Sorts the home ward with checkable students by the ward.\r\n */\r\n sortHomeWardWithCheckableStudentsAsc(\r\n one: HomeWardWithCheckAbleStudents,\r\n two: HomeWardWithCheckAbleStudents\r\n ) {\r\n return sortChurchUnitAsc(\r\n one.homeWard.sortName,\r\n one.homeWard.sortNumber,\r\n two.homeWard.sortName,\r\n two.homeWard.sortNumber\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Compares two units' sort information to get them in the correct order.\r\n */\r\nfunction sortChurchUnitAsc(\r\n sortName1: string,\r\n sortNumber1: number,\r\n sortName2: string,\r\n sortNumber2: number\r\n): number {\r\n let sorted: number = sortName1\r\n .toUpperCase()\r\n .localeCompare(sortName2.toUpperCase());\r\n if (sorted === 0) {\r\n sorted = sortNumber1 - sortNumber2;\r\n }\r\n\r\n return sorted;\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { ConfigService } from './config.service';\r\nimport { User, Config, CampusUnit, CampusStake, CampusWard, UnitType } from '../models';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport * as Security from '../tokens/roles.tokens';\r\nimport { CampusWardsDataService } from './data/campus-wards-data.service';\r\nimport { ChurchUnitsDataService } from './data/church-units-data.service';\r\n\r\n@Injectable()\r\nexport class UserService implements OnDestroy {\r\n private userSubject = new BehaviorSubject(null);\r\n\r\n // we need to know if it's a ward or stake\r\n private proxyWardSubject = new BehaviorSubject(null);\r\n private proxyStakeSubject = new BehaviorSubject(null);\r\n\r\n // but other things just might want to know it as just a unit\r\n private proxyUnitSubject = new BehaviorSubject(null);\r\n\r\n private config: Config;\r\n private configSubscription: Subscription;\r\n\r\n user = this.userSubject.asObservable();\r\n proxyUnit = this.proxyUnitSubject.asObservable();\r\n proxyWard = this.proxyWardSubject.asObservable();\r\n proxyStake = this.proxyStakeSubject.asObservable();\r\n\r\n constructor(private configService: ConfigService,\r\n private wardService: CampusWardsDataService,\r\n private churchUnitsService: ChurchUnitsDataService) {\r\n\r\n this.configSubscription = this.configService.config$.subscribe(\r\n (config: Config) => {\r\n this.config = config;\r\n this.userSubject.next(config.user);\r\n\r\n // kind of a hack, for some reason the system uses a proxy ward even for a logged in user\r\n // so since we know the current user is a leader, let's set their proxy just like would have\r\n // happened at login\r\n if (config.unitType) {\r\n if (this.config.unitType === UnitType.Stake) {\r\n this.churchUnitsService\r\n .getCampusStakeDetails(this.config.campusUnitId)\r\n .subscribe(stake => {\r\n if (stake != null) {\r\n this.setProxyStake(stake);\r\n }\r\n });\r\n } else if (this.config.unitType === UnitType.Ward) {\r\n this.wardService\r\n .getCampusWardById(this.config.campusUnitId)\r\n .subscribe(w => {\r\n this.setProxyWard(w);\r\n });\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.configSubscription.unsubscribe();\r\n }\r\n\r\n unsubscribe() {\r\n this.ngOnDestroy();\r\n }\r\n /**\r\n * Whether or not a user is logged in.\r\n */\r\n isLoggedIn(): boolean {\r\n return this.configService.config.user != null;\r\n }\r\n\r\n /**\r\n * Tells you if the user has at least one of the given roles.\r\n */\r\n userHasRole(permissions: string[]): boolean {\r\n if (this.isLoggedIn() && this.configService.config.user.roles) {\r\n for (let j = 0; j < permissions.length; j++) {\r\n for (let i = 0; i < this.configService.config.user.roles.length; i++) {\r\n if (permissions[j] === this.configService.config.user.roles[i]) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the campus ward the admin user wants to proxy for.\r\n */\r\n setProxyWard(ward: CampusWard) {\r\n if (\r\n this.userHasRole([Security.ApplicationRoles.byuiAdmin]) ||\r\n this.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n ) {\r\n this.proxyWardSubject.next(ward);\r\n this.proxyUnitSubject.next(ward);\r\n }\r\n }\r\n\r\n /**\r\n * Sets the campus stake the admin user wants to proxy for.\r\n */\r\n setProxyStake(stake: CampusStake) {\r\n if (\r\n this.userHasRole([Security.ApplicationRoles.byuiAdmin]) ||\r\n this.userHasRole([Security.ApplicationRoles.byuiLeader])\r\n ) {\r\n this.proxyStakeSubject.next(stake);\r\n this.proxyUnitSubject.next(stake);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the current value of the unit the user has proxied for.\r\n */\r\n getProxyUnit(): CampusUnit {\r\n return this.proxyUnitSubject.value;\r\n }\r\n\r\n getProxyWard(): CampusWard {\r\n return this.proxyWardSubject.value;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ExcelExportModule } from '@progress/kendo-angular-excel-export';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { PDFExportModule } from '@progress/kendo-angular-pdf-export';\r\nimport { RouterModule } from '@angular/router';\r\nimport {\r\n LoadingComponent,\r\n NotFoundComponent,\r\n AuthorizeDirective,\r\n ToolbarComponent,\r\n NavigationDrawerComponent,\r\n UnauthorizedComponent,\r\n AddressComponent,\r\n ApprovedAddressesComponent,\r\n PhoneNumberPipe,\r\n MiddleEllipsisPipe,\r\n CampusUnitSelectComponent,\r\n LocalWardSelectComponent,\r\n ContentOrErrorComponent,\r\n ChurchUnitPipe,\r\n WardComplexesComponent,\r\n SortPipe,\r\n StudentListingPipe,\r\n MissionNamePipe,\r\n EmailPipe,\r\n CampusUnitMessageComponent,\r\n CampusUnitMessageDisplayComponent,\r\n CampusUnitMessageEditDialogComponent,\r\n EmptyResponseRecievedComponent,\r\n} from '../shared';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { HomePageComponent } from './components/home-page/home-page.component';\r\nimport { EditorModule } from '@tinymce/tinymce-angular';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n ExcelExportModule,\r\n FormsModule,\r\n HttpClientModule,\r\n RouterModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatRadioModule,\r\n MatProgressSpinnerModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatSelectModule,\r\n MatExpansionModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatIconModule,\r\n MatDatepickerModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatListModule,\r\n MatTableModule,\r\n MatDialogModule,\r\n MatTabsModule,\r\n MatSlideToggleModule,\r\n MatNativeDateModule,\r\n MatSnackBarModule,\r\n PDFExportModule,\r\n EditorModule\r\n ],\r\n declarations: [\r\n LoadingComponent,\r\n AuthorizeDirective,\r\n NotFoundComponent,\r\n ToolbarComponent,\r\n NavigationDrawerComponent,\r\n UnauthorizedComponent,\r\n AddressComponent,\r\n PhoneNumberPipe,\r\n ApprovedAddressesComponent,\r\n CampusUnitSelectComponent,\r\n LocalWardSelectComponent,\r\n ContentOrErrorComponent,\r\n LocalWardSelectComponent,\r\n ChurchUnitPipe,\r\n MiddleEllipsisPipe,\r\n WardComplexesComponent,\r\n SortPipe,\r\n MissionNamePipe,\r\n EmailPipe,\r\n StudentListingPipe,\r\n CampusUnitMessageComponent,\r\n CampusUnitMessageDisplayComponent,\r\n CampusUnitMessageEditDialogComponent,\r\n EmptyResponseRecievedComponent,\r\n HomePageComponent\r\n ],\r\n exports: [\r\n RouterModule,\r\n CommonModule,\r\n ExcelExportModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n PhoneNumberPipe,\r\n ChurchUnitPipe,\r\n LoadingComponent,\r\n AddressComponent,\r\n ApprovedAddressesComponent,\r\n CampusUnitSelectComponent,\r\n LocalWardSelectComponent,\r\n ContentOrErrorComponent,\r\n AuthorizeDirective,\r\n ToolbarComponent,\r\n NavigationDrawerComponent,\r\n CampusUnitMessageEditDialogComponent,\r\n EmptyResponseRecievedComponent,\r\n MatButtonModule,\r\n MatCardModule,\r\n MatRadioModule,\r\n MatProgressSpinnerModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatAutocompleteModule,\r\n MatSelectModule,\r\n MatListModule,\r\n MatExpansionModule,\r\n MatSidenavModule,\r\n MatToolbarModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatTableModule,\r\n MatDialogModule,\r\n MatDatepickerModule,\r\n MatTabsModule,\r\n MatSlideToggleModule,\r\n MatSnackBarModule,\r\n WardComplexesComponent,\r\n SortPipe,\r\n MissionNamePipe,\r\n EmailPipe,\r\n StudentListingPipe,\r\n MatNativeDateModule,\r\n PDFExportModule,\r\n EditorModule\r\n ],\r\n entryComponents: [\r\n CampusUnitMessageEditDialogComponent\r\n ]\r\n})\r\nexport class SharedModule {}\r\n","/**\r\n * Let's us reference things as properties rather than magic strings.\r\n */\r\nexport interface IConstants {\r\n readonly unassignedUnitNumber: string;\r\n readonly emailRegex: RegExp;\r\n readonly unitNumberRegex: RegExp;\r\n readonly phoneRegex: RegExp;\r\n}\r\n\r\n/**\r\n * The actual values of the constants in our system.\r\n */\r\nexport const Constants: IConstants = {\r\n // Our system requires unit numbers, but sometimes they don't have one yet. So if the ward doesn't have one, we'll use this unit number as a placeholder one until\r\n // they have a good one. If we get a ward with this number, we won't show the unit number to them at all.\r\n unassignedUnitNumber: '999999999',\r\n\r\n // this regex came from Angular's source code; we're using it over a Validator.email because that one had a bug and treated it as a required field\r\n emailRegex: /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,\r\n\r\n // allow our unassigned unit number or a real unit number\r\n unitNumberRegex: /^999999999$|^[0-9]{1,7}$/,\r\n\r\n // allow all numbers or formatted as ###-###-#### or (###) ###-####\r\n phoneRegex: /^[0-9]{10}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$|^\\({0,1}[0-9]{3}\\){0,1} {0,1}[0-9]{3}-[0-9]{4}$|^\\d{3} \\d{3} \\d{4}$/\r\n};\r\n","/**\r\n * Let's us reference the roles that we use in our application for security. As properties of this\r\n * interface rather than as magic strings everywhere.\r\n */\r\nexport interface IApplicationRoles {\r\n readonly byuiAdmin: string;\r\n readonly byuiLeader: string;\r\n}\r\n\r\n/**\r\n * The actual values of the application security roles in our system.\r\n */\r\nexport const ApplicationRoles: IApplicationRoles = {\r\n byuiAdmin: 'Admin',\r\n byuiLeader: 'Leader'\r\n};\r\n","import { AbstractControl, FormControl, FormGroupDirective, NgForm } from \"@angular/forms\";\r\nimport { ErrorStateMatcher } from \"@angular/material/core\";\r\n\r\nexport const StartDateBeforeEndDate = (control: AbstractControl): {[key: string]: boolean} => {\r\n const startDateControl = control.get('startDateControl');\r\n const endDateControl = control.get('endDateControl');\r\n\r\n if (startDateControl && endDateControl && startDateControl.value && endDateControl.value) {\r\n const startDate = new Date(startDateControl.value);\r\n const endDate = new Date(endDateControl.value);\r\n\r\n return (endDate > startDate) ? null : {'endDateLessThanStartDate': true};\r\n }\r\n\r\n return null;\r\n}\r\n\r\n\r\n/**\r\n * Custom ErrorStateMatcher which returns true (error exists) when the parent form group is invalid and the control has been touched\r\n */\r\nexport class StartEndDateValidParentMatcher implements ErrorStateMatcher {\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n return control.parent.invalid && control.touched;\r\n }\r\n}\r\n","export * from './lookup/lookup.component';\r\nexport * from './ward-information/ward-information.component';\r\nexport * from './stake-information/stake-information.component';\r\nexport * from './unit-login/unit-login.component';\r\n","import { Component, OnChanges, SimpleChanges, Input } from '@angular/core';\r\nimport { trigger, transition, useAnimation, group, animate, style, state, AnimationEvent } from '@angular/animations';\r\nimport { fadeIn, fadeOut } from 'ng-animate';\r\nimport { CampusWard, CampusStake, SortService } from '../../../shared';\r\n\r\nconst fadeInParams = {params: { timing: .65 }};\r\nconst fadeOutParams = {params: { timing: .25, delay: 0}};\r\n\r\n@Component({\r\n selector: 'app-campus-unit-selection',\r\n templateUrl: './campus-unit-selection.component.html',\r\n styleUrls: ['./campus-unit-selection.component.scss'],\r\n animations: [\r\n trigger('fadeInDelay', [transition(':enter', [\r\n group([\r\n animate('0s', style({ opacity: 0 })),\r\n useAnimation(fadeIn, fadeInParams)])])]),\r\n trigger('fadeOut', [transition(':leave', useAnimation(fadeOut, fadeOutParams))])\r\n ]\r\n})\r\nexport class CampusUnitSelectionComponent implements OnChanges {\r\n\r\n @Input() unitType: string;\r\n @Input() married: boolean;\r\n @Input() campusWards: CampusWard[];\r\n @Input() campusStakes: CampusStake[];\r\n\r\n filteredCampusStakes: CampusStake[];\r\n selectedCampusStake: CampusStake;\r\n filteredCampusWards: CampusWard[];\r\n selectedCampusWard: CampusWard;\r\n\r\n constructor(private sorter: SortService) { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const wardsChange = changes['campusWards'];\r\n if (wardsChange != null) {\r\n this.onCampusWardChange();\r\n }\r\n\r\n const stakesChange = changes['campusStakes'];\r\n if (stakesChange != null) {\r\n this.onCampusStakeChange();\r\n }\r\n\r\n const marriedChange = changes['married'];\r\n if (marriedChange != null) {\r\n this.filterChurchUnits();\r\n }\r\n\r\n const unitTypeChange = changes['unitType'];\r\n if (unitTypeChange) {\r\n if (unitTypeChange.currentValue === 'ward') {\r\n this.onCampusWardChange();\r\n } else {\r\n this.onCampusStakeChange();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Filters our list of campus wards and stakes to either only contain single wards/stakes or married wards/stakes based on selection.\r\n */\r\n filterChurchUnits(): void {\r\n // based on our selection, we need to update our lists of wards/stakes that are being shown\r\n this.selectedCampusStake = null;\r\n this.selectedCampusWard = null;\r\n\r\n this.onCampusWardChange();\r\n this.onCampusStakeChange();\r\n }\r\n\r\n /**\r\n * Filters the campus wards that can be picked from based on whether or not we are working with married wards or not.\r\n */\r\n onCampusWardChange() {\r\n if (!this.campusWards) {\r\n return;\r\n }\r\n\r\n if (this.married) {\r\n this.filteredCampusWards = this.campusWards.filter(ward => {\r\n return ward.isForMarriedStudents;\r\n });\r\n } else {\r\n this.filteredCampusWards = this.campusWards.filter(ward => {\r\n return !ward.isForMarriedStudents;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Filters the campus stakes that can be picked from based on whether or not we are working with married wards or not.\r\n */\r\n onCampusStakeChange(stakeName?: string) {\r\n if (!this.campusStakes) {\r\n return;\r\n }\r\n\r\n if (this.married) {\r\n this.filteredCampusStakes = this.campusStakes.filter(stake => {\r\n return stake.isForMarriedStudents;\r\n });\r\n } else {\r\n this.filteredCampusStakes = this.campusStakes.filter(stake => {\r\n return !stake.isForMarriedStudents;\r\n });\r\n }\r\n }\r\n}\r\n","import { Component, Input, OnChanges } from '@angular/core';\r\nimport { finalize } from 'rxjs/operators';\r\nimport { ApprovedHousingComplex, AcademicSession, CampusWardSessionInformation, HousingDataService, SortService } from '../../../shared';\r\n\r\n@Component({\r\n selector: 'app-housing-complex-selection',\r\n templateUrl: './housing-complex-selection.component.html',\r\n styleUrls: ['./housing-complex-selection.component.scss']\r\n})\r\nexport class HousingComplexSelectionComponent implements OnChanges {\r\n\r\n @Input() housingComplexes: ApprovedHousingComplex[] = null;\r\n @Input() academicSessions: AcademicSession[] = null;\r\n\r\n selectedHousingComplex: ApprovedHousingComplex = null;\r\n selectedAcademicSession: AcademicSession;\r\n findingHousingWards = false;\r\n housingWards: CampusWardSessionInformation[];\r\n hasHousingError = false;\r\n\r\n constructor(private housingService: HousingDataService, private sorter: SortService) { }\r\n\r\n ngOnChanges() {\r\n if (this.academicSessions && this.academicSessions.length > 0) {\r\n this.academicSessions.sort(this.sorter.sortAcademicSessionsAsc);\r\n this.selectedAcademicSession = this.academicSessions[0];\r\n }\r\n\r\n if (this.housingComplexes) {\r\n this.housingComplexes.sort(this.sorter.sortHousingComplexesAsc);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the wards that are associated to the selected housing complex for the selected academic session.\r\n */\r\n getWardsForHousing(): void {\r\n if (this.selectedAcademicSession && this.selectedHousingComplex) {\r\n this.findingHousingWards = true;\r\n this.housingWards = null;\r\n this.hasHousingError = false;\r\n this.housingService.getCampusWardSessionInformation(this.selectedHousingComplex.complexId, this.selectedAcademicSession.sessionNumber)\r\n .pipe(\r\n finalize(() => this.findingHousingWards = false)\r\n )\r\n .subscribe(information => {\r\n this.housingWards = information;\r\n this.housingWards.sort(this.sorter.sortCampusWardSessionInformationsAsc);\r\n },\r\n error => {\r\n this.hasHousingError = true;\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { LocalWard } from '../../../shared';\r\n\r\n@Component({\r\n selector: 'app-local-ward-selection',\r\n templateUrl: './local-ward-selection.component.html',\r\n styleUrls: ['./local-ward-selection.component.scss']\r\n})\r\nexport class LocalWardSelectionComponent implements OnInit {\r\n @Input()\r\n localWards: LocalWard[];\r\n selectedLocalWard: LocalWard;\r\n\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport {\r\n trigger,\r\n transition,\r\n useAnimation,\r\n style,\r\n state\r\n} from '@angular/animations';\r\nimport { fadeIn, fadeOut } from 'ng-animate';\r\nimport {\r\n HousingDataService,\r\n ApprovedHousingComplex,\r\n AcademicSession,\r\n ChurchUnitsDataService,\r\n CampusWard,\r\n LocalWard,\r\n CampusStake\r\n} from '../../shared';\r\nimport { forkJoin } from 'rxjs';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n// used in our animations\r\nconst fadeInParams = { params: { timing: 0.65 } };\r\nconst fadeOutParams = { params: { timing: 0.25, delay: 0 } };\r\n\r\n@Component({\r\n templateUrl: './lookup.component.html',\r\n styleUrls: ['./lookup.component.scss'],\r\n animations: [\r\n trigger('unitTypeState', [\r\n state('non-ysa', style({ display: 'none' })),\r\n transition('* => ysa-ward', useAnimation(fadeIn, fadeInParams)),\r\n transition('* => non-ysa', useAnimation(fadeOut, fadeOutParams))\r\n ]),\r\n trigger('showYsaHomeWard', [\r\n state('ysa-non-home-ward', style({ display: 'none' })),\r\n state('non-ysa', style({ display: 'none' })),\r\n transition('* => ysa-home-ward', useAnimation(fadeIn, fadeInParams)),\r\n transition('* => non-ysa', useAnimation(fadeOut, fadeOutParams))\r\n ]),\r\n trigger('hideYsaHomeWard', [\r\n state('ysa-home-ward', style({ display: 'none' })),\r\n state('non-ysa', style({ display: 'none' })),\r\n transition('* => ysa-non-home-ward', useAnimation(fadeIn, fadeInParams)),\r\n transition('* => non-ysa', useAnimation(fadeOut, fadeOutParams))\r\n ]),\r\n trigger('fade', [\r\n transition(':enter', useAnimation(fadeIn, fadeInParams)),\r\n transition(':leave', useAnimation(fadeOut, fadeOutParams))\r\n ])\r\n ]\r\n})\r\nexport class LookupComponent implements OnInit {\r\n // options for our radio buttons\r\n unitType = 'ward';\r\n unitMaritalType = 'single';\r\n localWardOnly = false;\r\n\r\n // spinner flag\r\n loading = false;\r\n\r\n // housing state; selected complex, list of complexes to select from, whether or not we had errors loading the housing data\r\n housingComplexes: ApprovedHousingComplex[] = null;\r\n academicSessions: AcademicSession[] = null;\r\n\r\n // church units\r\n campusWards: CampusWard[];\r\n campusStakes: CampusStake[];\r\n localWards: LocalWard[];\r\n\r\n /* Constructor */\r\n constructor(\r\n private housingService: HousingDataService,\r\n private churchService: ChurchUnitsDataService\r\n ) {}\r\n\r\n /**\r\n * Gets the animation state our component should be in based on the selected unit types and unit marital types.\r\n */\r\n getUnitTypeState(): string {\r\n return this.unitMaritalType === 'single' && this.unitType === 'ward'\r\n ? 'ysa-ward'\r\n : 'non-ysa';\r\n }\r\n\r\n /**\r\n * Gets the animation state our component should be in based on whether or not the user wants home units.\r\n */\r\n getYsaHomeWardState(): string {\r\n if (this.unitMaritalType === 'single' && this.unitType === 'ward') {\r\n return this.localWardOnly ? 'ysa-home-ward' : 'ysa-non-home-ward';\r\n }\r\n\r\n return 'non-ysa';\r\n }\r\n\r\n /**\r\n * When our component loads, load supporting data that we need; show a spinner while we do this.\r\n */\r\n ngOnInit() {\r\n this.loading = true;\r\n forkJoin([this.housingService.getCurrentApprovedHousingComplexes(),\r\n this.housingService.getAcademicSessions(),\r\n this.churchService.getCampusWards()]\r\n )\r\n .pipe(\r\n finalize(() => this.loading = false)\r\n )\r\n .subscribe(([complexes, sessions, campusWards]) => {\r\n this.housingComplexes = complexes;\r\n this.academicSessions = sessions;\r\n\r\n // this.localWards = churchUnits.localWards;\r\n this.campusWards = campusWards;\r\n // this.campusStakes = churchUnits.campusStakes;\r\n });\r\n }\r\n\r\n getLocalWards() {\r\n if (this.localWards == null) {\r\n this.churchService\r\n .getLocalWards()\r\n .subscribe(localWards => (this.localWards = localWards));\r\n }\r\n }\r\n\r\n getCampusStakes() {\r\n if (this.campusStakes == null) {\r\n this.churchService\r\n .getCampusStakes()\r\n .subscribe(campusStakes => (this.campusStakes = campusStakes));\r\n }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ChurchUnitsDataService, CampusStakeDetails, SortService } from '../../shared';\r\nimport * as Config from '../../shared/tokens/constants.tokens';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n templateUrl: './stake-information.component.html',\r\n styleUrls: ['./stake-information.component.scss']\r\n})\r\nexport class StakeInformationComponent implements OnInit {\r\n\r\n loading = false;\r\n loadingError = false;\r\n stakeDetails: CampusStakeDetails;\r\n\r\n constructor(private route: ActivatedRoute, private churchService: ChurchUnitsDataService,\r\n private titleService: Title, private sorter: SortService, private router: Router) { }\r\n\r\n ngOnInit() {\r\n const campusStakeId = +this.route.snapshot.paramMap.get('campusStakeId');\r\n\r\n // load the ward's information\r\n if (campusStakeId) {\r\n this.loading = true;\r\n this.churchService.getCampusStakeDetails(campusStakeId)\r\n .pipe(\r\n finalize(() => this.loading = false)\r\n ) \r\n .subscribe((stakeDetails) => {\r\n this.handleStakeDetails(stakeDetails);\r\n },\r\n error => {\r\n this.loadingError = true;\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Whether or not the loaded ward has a real unit number.\r\n */\r\n hasRealUnitNumber(): boolean {\r\n return this.stakeDetails && this.stakeDetails.unitNumber !== Config.Constants.unassignedUnitNumber;\r\n }\r\n\r\n /**\r\n * Handles the results of looking up our stake details.\r\n */\r\n private handleStakeDetails(stakeDetails: CampusStakeDetails) {\r\n this.stakeDetails = stakeDetails;\r\n if (this.stakeDetails) {\r\n this.titleService.setTitle(`${this.stakeDetails.name} Information`);\r\n\r\n // sort the wards\r\n this.stakeDetails.wards.sort(this.sorter.sortChurchUnitsAsc);\r\n } else {\r\n // redirect to not found\r\n this.router.navigate(['/404'], {skipLocationChange: true});\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { LookupComponent, WardInformationComponent, StakeInformationComponent } from '../unit-information';\r\n\r\nconst routes: Routes = [\r\n { path: 'units', component: LookupComponent, data: {title: 'Find BYU-Idaho Ward/Stake'} },\r\n { path: 'units/wards/:campusWardId', component: WardInformationComponent, data: { title: 'Campus Ward'}},\r\n { path: 'units/stakes/:campusStakeId', component: StakeInformationComponent, data: { title: 'Campus Stake'}}\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class UnitInformationRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { UnitInformationRoutingModule } from './unit-information-routing.module';\r\nimport { LookupComponent } from '../unit-information';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { WardInformationComponent } from './ward-information/ward-information.component';\r\nimport { StakeInformationComponent } from './stake-information/stake-information.component';\r\nimport { LocalWardSelectionComponent } from './lookup/local-ward-selection/local-ward-selection.component';\r\nimport { HousingComplexSelectionComponent } from './lookup/housing-complex-selection/housing-complex-selection.component';\r\nimport { CampusUnitSelectionComponent } from './lookup/campus-unit-selection/campus-unit-selection.component';\r\nimport { UnitLeaderComponent } from './unit-leader/unit-leader.component';\r\nimport { UnitLoginComponent } from './unit-login/unit-login.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n UnitInformationRoutingModule\r\n ],\r\n declarations: [\r\n LookupComponent,\r\n WardInformationComponent,\r\n StakeInformationComponent,\r\n LocalWardSelectionComponent,\r\n HousingComplexSelectionComponent,\r\n CampusUnitSelectionComponent,\r\n UnitLeaderComponent,\r\n UnitLoginComponent\r\n ]\r\n})\r\nexport class UnitInformationModule { }\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { UnitLeader } from '../../shared';\r\n\r\n@Component({\r\n selector: 'app-unit-leader',\r\n templateUrl: './unit-leader.component.html',\r\n styleUrls: ['./unit-leader.component.scss']\r\n})\r\nexport class UnitLeaderComponent implements OnInit {\r\n\r\n @Input() leader: UnitLeader;\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\r\nimport {\r\n CampusWardsDataService,\r\n ConfigService,\r\n UserService,\r\n CampusUnitAccess,\r\n ChurchUnitsDataService,\r\n UnitType,\r\n NavigationService,\r\n UnitLoginResult,\r\n} from '../../shared';\r\nimport { Route, Router } from '@angular/router';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-unit-login',\r\n templateUrl: './unit-login.component.html',\r\n styleUrls: ['./unit-login.component.scss']\r\n})\r\nexport class UnitLoginComponent implements OnInit {\r\n loading: boolean;\r\n validating: boolean;\r\n loginForm: FormGroup;\r\n loginInfo: CampusUnitAccess;\r\n errorResults = false;\r\n\r\n private subscription: Subscription;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private wardService: CampusWardsDataService,\r\n private churchUnitsService: ChurchUnitsDataService,\r\n private configService: ConfigService,\r\n private router: Router,\r\n private navigationService: NavigationService,\r\n private userService: UserService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.subscription = null;\r\n this.navigationService.unsubscribeUser();\r\n this.loading = false;\r\n this.validating = false;\r\n this.loginForm = this.formBuilder.group({\r\n unitNum: ['', Validators.required],\r\n unitKey: ['', Validators.required]\r\n });\r\n }\r\n\r\n loginAsAdmin() {\r\n this.router.navigate(['/login']);\r\n }\r\n\r\n /**\r\n * unit login\r\n */\r\n login() {\r\n this.errorResults = false;\r\n this.validating = true;\r\n\r\n if (!this.loginForm.valid) {\r\n return;\r\n }\r\n\r\n this.loginInfo = new CampusUnitAccess();\r\n this.loginInfo.password = this.loginForm.get('unitKey')?.value;\r\n this.loginInfo.unitNumber = this.loginForm.get('unitNum')?.value;\r\n\r\n this.churchUnitsService.unitLogIn(this.loginInfo).subscribe(\r\n (result: UnitLoginResult) => {\r\n this.validating = false;\r\n this.loginForm.reset();\r\n if (result != null) {\r\n this.configService.setByuiLeader(result);\r\n if (result.unitType === UnitType.Stake) {\r\n this.subscription = this.churchUnitsService\r\n .getCampusStakeDetails(result.unitId)\r\n .subscribe(stake => {\r\n if (stake != null) {\r\n this.userService.setProxyStake(stake);\r\n this.router.navigate(['leader/stake']);\r\n }\r\n });\r\n } else if (result.unitType === UnitType.Ward) {\r\n this.subscription = this.wardService\r\n .getCampusWardById(result.unitId)\r\n .subscribe(w => {\r\n this.userService.setProxyWard(w);\r\n this.router.navigate(['leader/ward']);\r\n });\r\n }\r\n }\r\n },\r\n () => {\r\n this.validating = false;\r\n this.errorResults = true;\r\n this.loginForm.reset();\r\n }\r\n );\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { Title } from '@angular/platform-browser';\r\nimport {\r\n CampusWardDetails,\r\n SortService,\r\n WardMeeting,\r\n HousingDataService,\r\n AcademicSession,\r\n ApprovedHousingSessionInformation,\r\n CampusWardsDataService\r\n} from '../../shared';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport * as Config from '../../shared/tokens/constants.tokens';\r\nimport { finalize } from 'rxjs/operators';\r\n\r\n@Component({\r\n templateUrl: './ward-information.component.html',\r\n styleUrls: ['./ward-information.component.scss']\r\n})\r\nexport class WardInformationComponent implements OnInit {\r\n loading = false;\r\n loadingError = false;\r\n wardDetails: CampusWardDetails;\r\n\r\n meetingColumns = ['meeting', 'time', 'location'];\r\n meetingsDataSource = new MatTableDataSource();\r\n\r\n constructor(\r\n private route: ActivatedRoute,\r\n private wardService: CampusWardsDataService,\r\n private housingService: HousingDataService,\r\n private titleService: Title,\r\n private sorter: SortService,\r\n private router: Router\r\n ) {}\r\n\r\n ngOnInit() {\r\n const campusWardId = +this.route.snapshot.paramMap.get('campusWardId');\r\n\r\n // load the ward's information\r\n if (campusWardId) {\r\n this.loading = true;\r\n this.wardService\r\n .getCampusWardDetails(campusWardId)\r\n .pipe(\r\n finalize(() => (this.loading = false))\r\n ) \r\n .subscribe(\r\n details => this.handleWardDetails(details),\r\n error => (this.loadingError = true)\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Whether or not the loaded ward has a real unit number.\r\n */\r\n hasRealUnitNumber(): boolean {\r\n return (\r\n this.wardDetails &&\r\n this.wardDetails.unitNumber !== Config.Constants.unassignedUnitNumber\r\n );\r\n }\r\n\r\n /**\r\n * Gets the ward type; Married Single Ward or Single Student Ward.\r\n */\r\n getWardType(): string {\r\n return this.wardDetails.isForMarriedStudents\r\n ? 'Married Student Ward'\r\n : 'Single Student Ward';\r\n }\r\n\r\n /**\r\n * Gets things ready for the details: sets page title, sorts meetings, local wards, etc\r\n */\r\n private handleWardDetails(wardDetails: CampusWardDetails): void {\r\n this.wardDetails = wardDetails;\r\n if (this.wardDetails) {\r\n this.titleService.setTitle(`${this.wardDetails.name} Information`);\r\n\r\n // sort the meetings based on their order\r\n this.wardDetails.meetings.sort(this.sorter.sortWardMeetingsAsc);\r\n this.meetingsDataSource.data = this.wardDetails.meetings;\r\n\r\n // sort the local wards\r\n this.wardDetails.localWards.sort(this.sorter.sortLocalWardsAsc);\r\n } else {\r\n // redirect to not found\r\n this.router.navigate(['/404'], { skipLocationChange: true });\r\n }\r\n }\r\n}\r\n","// The file contents for the current environment will overwrite these during build.\r\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\r\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\r\n// The list of which env maps to which file can be found in `.angular-cli.json`.\r\n\r\nexport const environment = {\r\n production: false\r\n};\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule);\r\n"],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[]}