Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { SessionService } from './../Commons/session-service';
import { Component, Input } from '@angular/core';
import { AuthService, NGXLogger, EventBusService } from 'web-console-core';
/** @type {?} */
const LOG_TAG = '[TopMenuComponent]';
export class TopMenuComponent {
/**
* @param {?} logger
* @param {?} authService
* @param {?} eventBus
* @param {?} sessionService
*/
constructor(logger, authService, eventBus, sessionService) {
this.logger = logger;
this.authService = authService;
this.eventBus = eventBus;
this.sessionService = sessionService;
}
/**
* @return {?}
*/
ngOnInit() {
this.logger.debug(LOG_TAG, 'Initializing...');
this.eventBus.on('AuthService:LoginEvent').subscribe((/**
* @param {?} message
* @return {?}
*/
(message) => {
this.logger.debug(LOG_TAG, 'on AuthService:LoginEvent received');
this.updateInfo();
}));
// Fallback info
this.currentUserInfo = {
userName: 'N/A',
userAbbr: 'NA',
lastAccess: new Date()
};
this._mainMenuLabel = this.currentUserInfo.userAbbr;
this.items = [
{ label: this.getCurrentUserDesc(), disabled: true },
{ label: 'Last Login: ' + this.getLastAccessStr(), disabled: true },
{ separator: true },
{ label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
* @param {?} event
* @return {?}
*/
(event) => { this.onLogout(); }) }
];
// Retrieve from server
this.updateInfo();
}
/**
* @private
* @return {?}
*/
updateInfo() {
this.sessionService.currentUser.subscribe((/**
* @param {?} currentUserInfo
* @return {?}
*/
(currentUserInfo) => {
this.currentUserInfo = currentUserInfo;
this._mainMenuLabel = currentUserInfo.userAbbr;
this.items = [
{ label: this.getCurrentUserDesc(), disabled: true },
{ label: 'Last Login: ' + this.getLastAccessStr(), disabled: true },
{ separator: true },
{ label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
* @param {?} event
* @return {?}
*/
(event) => { this.onLogout(); }) }
];
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.logger.warn('error while retrieving current user info from sessions service: ', error);
}));
}
/**
* @private
* @return {?}
*/
getCurrentUserDesc() {
this.logger.debug(LOG_TAG, 'getCurrentUserDesc for:', this.currentUserInfo);
return 'Current user: ' + this.currentUserInfo.userName;
}
/**
* @private
* @param {?} date
* @return {?}
*/
formatDate(date) {
/** @type {?} */
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
/** @type {?} */
var day = date.getDate();
/** @type {?} */
var monthIndex = date.getMonth();
/** @type {?} */
var year = date.getFullYear();
return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
/**
* @private
* @return {?}
*/
getLastAccessStr() {
this.logger.debug(LOG_TAG, 'getLastAccessStr for:', this.currentUserInfo.lastAccess);
try {
//let now = moment().format('LLLL');
//moment("20111031", "YYYYMMDD").fromNow();// this.sessionService.currentUser.lastAccess);
//return myMoment.format('ddd, h:mm A');
//return moment(this.sessionService.currentUser.lastAccess).format('ddd, h:mm A');
return this.formatDate(new Date(this.currentUserInfo.lastAccess));
}
catch (err) {
this.logger.error(LOG_TAG, 'getLastAccessStr error:', err);
return 'n.a.';
}
}
/**
* @return {?}
*/
onLogout() {
this.logger.debug(LOG_TAG, 'Logout invoked.');
this.authService.logout().subscribe((/**
* @param {?} resp
* @return {?}
*/
(resp) => {
}), (/**
* @param {?} err
* @return {?}
*/
(err) => {
this.logger.warn('Logout revoke request failed');
}));
}
/**
* @return {?}
*/
get mainMenuLabel() {
return this._mainMenuLabel;
}
}
TopMenuComponent.decorators = [
{ type: Component, args: [{
selector: 'wc-top-menu-component',
template: "<p-menu #menu [popup]=\"true\" [model]=\"items\" [styleClass]=\"'top-menu'\"></p-menu>\n<button type=\"button\" pButton icon=\"pi pi-bars\" label=\"{{mainMenuLabel}}\" (click)=\"menu.toggle($event)\"></button>",
styles: [""]
}] }
];
/** @nocollapse */
TopMenuComponent.ctorParameters = () => [
{ type: NGXLogger },
{ type: AuthService },
{ type: EventBusService },
{ type: SessionService }
];
TopMenuComponent.propDecorators = {
visible: [{ type: Input }]
};
if (false) {
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype._mainMenuLabel;
/** @type {?} */
TopMenuComponent.prototype.items;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.currentUserInfo;
/** @type {?} */
TopMenuComponent.prototype.visible;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.logger;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.authService;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.eventBus;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.sessionService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLW1lbnUtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9Ub3BNZW51L3RvcC1tZW51LWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztNQUdyRSxPQUFPLEdBQUcsb0JBQW9CO0FBT3BDLE1BQU0sT0FBTyxnQkFBZ0I7Ozs7Ozs7SUFRekIsWUFBb0IsTUFBaUIsRUFDekIsV0FBd0IsRUFDeEIsUUFBeUIsRUFDekIsY0FBOEI7UUFIdEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDbkMsQ0FBQzs7OztJQUVSLFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUMsQ0FBQztRQUVILGdCQUFnQjtRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxF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b25TZXJ2aWNlIH0gZnJvbSAnLi8uLi9Db21tb25zL3Nlc3Npb24tc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIE5HWExvZ2dlciwgRXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5pbXBvcnQgeyBDdXJyZW50VXNlckluZm8gfSBmcm9tICcuLi9Db21tb25zL3Nlc3Npb24tc2VydmljZSc7XG5cbmNvbnN0IExPR19UQUcgPSAnW1RvcE1lbnVDb21wb25lbnRdJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3Yy10b3AtbWVudS1jb21wb25lbnQnLFxuICAgIHN0eWxlVXJsczogWyAnLi90b3AtbWVudS1jb21wb25lbnQuc2NzcycgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG9wLW1lbnUtY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRvcE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHJpdmF0ZSBfbWFpbk1lbnVMYWJlbDogc3RyaW5nO1xuICAgIGl0ZW1zOiBNZW51SXRlbVtdO1xuICAgIHByaXZhdGUgY3VycmVudFVzZXJJbmZvOiBDdXJyZW50VXNlckluZm87XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmlzaWJsZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBOR1hMb2dnZXIsXG4gICAgICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGV2ZW50QnVzOiBFdmVudEJ1c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblNlcnZpY2U6IFNlc3Npb25TZXJ2aWNlXG4gICAgICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnSW5pdGlhbGl6aW5nLi4uJyk7XG5cbiAgICAgICAgdGhpcy5ldmVudEJ1cy5vbignQXV0aFNlcnZpY2U6TG9naW5FdmVudCcpLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ29uIEF1dGhTZXJ2aWNlOkxvZ2luRXZlbnQgcmVjZWl2ZWQnKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5mbygpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGYWxsYmFjayBpbmZvXG4gICAgICAgIHRoaXMuY3VycmVudFVzZXJJbmZvID0ge1xuICAgICAgICAgICAgdXNlck5hbWU6ICdOL0EnLFxuICAgICAgICAgICAgdXNlckFiYnI6ICdOQScsXG4gICAgICAgICAgICBsYXN0QWNjZXNzOiBuZXcgRGF0ZSgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX21haW5NZW51TGFiZWwgPSB0aGlzLmN1cnJlbnRVc2VySW5mby51c2VyQWJicjtcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6IHRoaXMuZ2V0Q3VycmVudFVzZXJEZXNjKCksIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTGFzdCBMb2dpbjogJyArIHRoaXMuZ2V0TGFzdEFjY2Vzc1N0cigpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMb2dvdXQnLCBpY29uOiAncGkgcGktZncgcGktYW5nbGUtcmlnaHQnLCBjb21tYW5kOiAoZXZlbnQpID0+IHsgdGhpcy5vbkxvZ291dCgpOyB9IH1cbiAgICAgICAgXTtcblxuICAgICAgICAvLyBSZXRyaWV2ZSBmcm9tIHNlcnZlclxuICAgICAgICB0aGlzLnVwZGF0ZUluZm8oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UuY3VycmVudFVzZXIuc3Vic2NyaWJlKChjdXJyZW50VXNlckluZm86IEN1cnJlbnRVc2VySW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlckluZm8gPSBjdXJyZW50VXNlckluZm87XG4gICAgICAgICAgICB0aGlzLl9tYWluTWVudUxhYmVsID0gY3VycmVudFVzZXJJbmZvLnVzZXJBYmJyO1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiB0aGlzLmdldEN1cnJlbnRVc2VyRGVzYygpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdMYXN0IExvZ2luOiAnICsgdGhpcy5nZXRMYXN0QWNjZXNzU3RyKCksIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBzZXBhcmF0b3I6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTG9nb3V0JywgaWNvbjogJ3BpIHBpLWZ3IHBpLWFuZ2xlLXJpZ2h0JywgY29tbWFuZDogKGV2ZW50KSA9PiB7IHRoaXMub25Mb2dvdXQoKTsgfSB9XG4gICAgICAgICAgICBdO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2Vycm9yIHdoaWxlIHJldHJpZXZpbmcgY3VycmVudCB1c2VyIGluZm8gZnJvbSBzZXNzaW9ucyBzZXJ2aWNlOiAnLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q3VycmVudFVzZXJEZXNjKCk6IHN0cmluZyB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRDdXJyZW50VXNlckRlc2MgZm9yOicsIHRoaXMuY3VycmVudFVzZXJJbmZvKTtcbiAgICAgICAgcmV0dXJuICdDdXJyZW50IHVzZXI6ICcgKyB0aGlzLmN1cnJlbnRVc2VySW5mby51c2VyTmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZSkge1xuICAgICAgICB2YXIgbW9udGhOYW1lcyA9IFtcbiAgICAgICAgICBcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsXG4gICAgICAgICAgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsXG4gICAgICAgICAgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsXG4gICAgICAgICAgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJcbiAgICAgICAgXTtcbiAgICAgIFxuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXRlKCk7XG4gICAgICAgIHZhciBtb250aEluZGV4ID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIFxuICAgICAgICByZXR1cm4gZGF5ICsgJyAnICsgbW9udGhOYW1lc1ttb250aEluZGV4XSArICcgJyArIHllYXI7XG4gICAgICB9XG4gICAgICBcblxuICAgIHByaXZhdGUgZ2V0TGFzdEFjY2Vzc1N0cigpOiBzdHJpbmcge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0TGFzdEFjY2Vzc1N0ciBmb3I6JywgdGhpcy5jdXJyZW50VXNlckluZm8ubGFzdEFjY2Vzcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvL2xldCBub3cgPSBtb21lbnQoKS5mb3JtYXQoJ0xMTEwnKTtcbiAgICAgICAgICAgIC8vbW9tZW50KFwiMjAxMTEwMzFcIiwgXCJZWVlZTU1ERFwiKS5mcm9tTm93KCk7Ly8gdGhpcy5zZXNzaW9uU2VydmljZS5jdXJyZW50VXNlci5sYXN0QWNjZXNzKTtcbiAgICAgICAgICAgIC8vcmV0dXJuIG15TW9tZW50LmZvcm1hdCgnZGRkLCBoOm1tIEEnKTtcbiAgICAgICAgICAgIC8vcmV0dXJuIG1vbWVudCh0aGlzLnNlc3Npb25TZXJ2aWNlLmN1cnJlbnRVc2VyLmxhc3RBY2Nlc3MpLmZvcm1hdCgnZGRkLCBoOm1tIEEnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdERhdGUobmV3IERhdGUodGhpcy5jdXJyZW50VXNlckluZm8ubGFzdEFjY2VzcykpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKExPR19UQUcsICdnZXRMYXN0QWNjZXNzU3RyIGVycm9yOicsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gJ24uYS4nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkxvZ291dCgpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ0xvZ291dCBpbnZva2VkLicpO1xuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnN1YnNjcmliZSgocmVzcCkgPT4ge1xuICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdMb2dvdXQgcmV2b2tlIHJlcXVlc3QgZmFpbGVkJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWFpbk1lbnVMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFpbk1lbnVMYWJlbDtcbiAgICB9XG5cbn1cbiJdfQ==