diff options
Diffstat (limited to 'gae/frontend/src/app/menu/menu_base.ts')
-rw-r--r-- | gae/frontend/src/app/menu/menu_base.ts | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/gae/frontend/src/app/menu/menu_base.ts b/gae/frontend/src/app/menu/menu_base.ts new file mode 100644 index 0000000..4d68f03 --- /dev/null +++ b/gae/frontend/src/app/menu/menu_base.ts @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** This class defines and/or implements the common properties and methods + * used among menus. + */ +import { AppService } from '../appservice'; +import { MatSnackBar } from '@angular/material'; +import moment from 'moment-timezone'; + + +export abstract class MenuBaseClass { + count = -1; + + loading = false; + pageSizeOptions = [20, 50, 100, 200]; + pageSize = 100; + pageIndex = 0; + + protected constructor(private appService: AppService, + public snackBar: MatSnackBar) { + this.appService.closeSideNav(); + this.snackBar.dismiss(); + } + + /** Returns an Observable which handles a response of count API. + * @param additionalOperations A list of lambda functions. + */ + getDefaultCountObservable(additionalOperations: any[] = []) { + return { + next: (response) => { + this.count = response.count; + for (const operation of additionalOperations) { + operation(response); + } + }, + error: (error) => this.showSnackbar(`[${error.status}] ${error.name}`) + }; + } + + getRelativeTime(timeString) { + return (moment.tz(timeString, 'YYYY-MM-DDThh:mm:ss', 'UTC').isValid() ? + moment.tz(timeString, 'YYYY-MM-DDThh:mm:ss', 'UTC').fromNow() : '---'); + } + + /** Checks whether timeString is expired from current time. */ + isExpired(timeString, hours=72) { + let currentTime = moment.tz(timeString, 'YYYY-MM-DDThh:mm:ss', 'UTC'); + if (!currentTime.isValid()) { return false; } + + let diff = moment().diff(currentTime); + let duration = moment.duration(diff); + return duration.asHours() > hours; + } + + /** Displays a snackbar notification. */ + showSnackbar(message = 'Error', duration = 5000) { + this.loading = false; + this.snackBar.open(message, 'DISMISS', {duration}); + } + + /** Displays a side nav window and lists all properties of selected entity. */ + onShowDetailsClicked(entity) { + this.appService.showDetails(entity); + } +} |