Skip to content

Commit

Permalink
Add pagination for editing sermons
Browse files Browse the repository at this point in the history
  • Loading branch information
clarkmalmgren committed Dec 24, 2017
1 parent 5ec5f5a commit e173a8c
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 19 deletions.
2 changes: 2 additions & 0 deletions src/app/components/atoms/material.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
MatExpansionModule,
MatIconModule,
MatInputModule,
MatPaginatorModule,
MatSelectModule,
MatListModule
} from '@angular/material';
Expand All @@ -15,6 +16,7 @@ export const MATERIAL_MODULES = [
MatExpansionModule,
MatIconModule,
MatInputModule,
MatPaginatorModule,
MatSelectModule,
MatListModule
];
9 changes: 6 additions & 3 deletions src/app/components/pages/admin/sermons.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,12 @@ <h4>Sermons</h4>
</mat-expansion-panel>
</mat-accordion>

<div class="submit-wrapper">
<bc-observable-button class="save" (bcOnClick)="save()" [disabled]="!valid">Save</bc-observable-button>
</div>
<mat-paginator
[length]="pager.length"
[pageSize]="pager.itemsPerPage"
[pageSizeOptions]="[5, 10, 25]"
(page)="pager.update($event)"
></mat-paginator>
</form>
</section>

Expand Down
17 changes: 5 additions & 12 deletions src/app/components/pages/admin/sermons.scss
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,15 @@ form {
}
}

div.submit-wrapper {
mat-paginator {
flex: 100%;
display: flex;
flex-flow: row wrap;
justify-content: center;

observable-button {
flex: 1 1 auto;
max-width: 230px;
margin: 13px;
padding-bottom: 13px;

/deep/ mat-select.mat-select {
height: initial;
}
}
}

mat-list-item.new-sermon /deep/ div.mat-list-item {
justify-content: flex-end;
}

div.icon {
Expand Down
6 changes: 5 additions & 1 deletion src/app/components/pages/admin/sermons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { Secured } from './secured';
import {
FirebaseService,
Observable,
Pager,
SeriesImageForm,
SeriesImageService,
Sermon,
Expand All @@ -19,6 +20,7 @@ export class SermonsComponent extends Secured implements OnInit {

sermons: Sermon[];
images: SeriesImageForm[];
pager: Pager<Sermon>;

constructor(
router: Router,
Expand All @@ -39,7 +41,9 @@ export class SermonsComponent extends Secured implements OnInit {
}

update(): void {
this.service.all()
this.pager = this.service.page();
this.pager
.observe()
.subscribe(sermons => {
this.sermons = sermons;
});
Expand Down
6 changes: 3 additions & 3 deletions src/app/services/firebase.browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,14 @@ export class FirebaseBrowserDatabase implements FirebaseDatabase {
.map((snap: firebase.database.DataSnapshot) => snap.exists());
}

getOnce(path: string): Observable<any> {
getOnce<T>(path: string): Observable<T> {
return observe(this.database.ref(path).once('value'))
.map((snap: firebase.database.DataSnapshot) => snap.val());
}

watch(path: string): Observable<any> {
watch<T>(path: string): Observable<T> {
return Observable
.create((observer: Observer<any>) => {
.create((observer: Observer<T>) => {
this.database.ref(path).on('value', (snap) => {
observer.next(snap.val());
});
Expand Down
2 changes: 2 additions & 0 deletions src/app/services/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { Env } from './env';
import { GlobalErrorHandler } from './error.handler';
import { FirebaseService, FirebaseStorage, FirebaseDatabase } from './firebase.service';
import { Observable, Subscription } from './observable';
import { Pager } from './pager';
import { SeriesImageForm, SeriesImageService } from './series.service';
import { SermonService, Sermon } from './sermon.service';
import { FeatureToggles, TogglesService } from './toggles.service';
Expand Down Expand Up @@ -36,6 +37,7 @@ export {
FirebaseStorage,
GlobalErrorHandler,
Observable,
Pager,
SeriesImageForm,
SeriesImageService,
Sermon,
Expand Down
44 changes: 44 additions & 0 deletions src/app/services/pager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { PageEvent } from '@angular/material'
import { FirebaseDatabase } from './firebase.service';
import { Observable, Observer } from './observable';

export class Pager<T> {

itemsPerPage: number = 25;
currentPage: number = 0;

private items: T[];
private observer: Observer<T[]>

constructor(private source: Observable<T[]>) {
source.subscribe((items) => {
this.items = items;
this.emit();
})
}

get length(): number {
return this.items.length;
}

observe(): Observable<T[]> {
return Observable.create((observer: Observer<T[]>) => {
this.observer = observer;
this.emit();
});
}

private emit(): void {
if (this.observer && this.items) {
const min = this.currentPage * this.itemsPerPage;
this.observer.next(this.items.slice(min, this.itemsPerPage));
}
}

update(event: PageEvent) {
this.currentPage = event.pageIndex;
this.itemsPerPage = event.pageSize;
this.emit();
}

}
5 changes: 5 additions & 0 deletions src/app/services/sermon.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Injectable } from '@angular/core';
import { FirebaseService, FirebaseUtils } from './firebase.service';
import { Observable } from './observable';
import { Pager } from './pager';
import * as moment from 'moment';
import 'moment-timezone';

Expand Down Expand Up @@ -95,6 +96,10 @@ export class SermonService {
});
}

page(): Pager<Sermon> {
return new Pager(this.all());
}

all(): Observable<Sermon[]> {
return this.firebase
.database()
Expand Down

0 comments on commit e173a8c

Please sign in to comment.