keycloak-memoizeit

Details

diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification.component.html b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification.component.html
new file mode 100644
index 0000000..64cadd4
--- /dev/null
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification.component.html
@@ -0,0 +1,6 @@
+<pfng-inline-notification
+    [message]="message"
+    [dismissable]="dismissable"
+    [type]="type"
+    [(hidden)]="hidden">
+</pfng-inline-notification>
\ No newline at end of file
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification-component.ts b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification-component.ts
new file mode 100644
index 0000000..6683dda
--- /dev/null
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/inline-notification-component.ts
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2018 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * 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.
+ */
+import {Component, OnInit} from '@angular/core';
+import {Router, NavigationEnd} from '@angular/router';
+
+import {KeycloakNotificationService} from '../notification/keycloak-notification.service';
+
+@Component({
+    selector: 'inline-notification',
+    templateUrl: './inline-notification.component.html',
+    styleUrls: ['./inline-notification.component.css']
+})
+export class InlineNotification implements OnInit {
+    dismissable: boolean = true;
+    message: string = '';
+    type: string = 'success';
+    hidden: boolean = true;
+    
+    constructor(private notificationSvc: KeycloakNotificationService,
+                private router: Router) {
+        this.router.events.subscribe(value => {
+            if (value instanceof NavigationEnd) {
+                this.hidden = true;
+            }
+        });
+    }
+
+    ngOnInit(): void {
+      // Track Notifications
+      this.notificationSvc.getNotificationsObserver
+        .subscribe((notification) => {
+            console.log('>> notification=' + JSON.stringify(notification));
+            if (notification.length === 0) {
+                this.hidden = true;
+                return;
+            }
+            console.log('>> updating message...');
+            // always display the latest message
+            this.message = notification[notification.length-1].message;
+            this.type = notification[notification.length-1].type;
+            this.hidden = false;
+        });
+    }
+
+}
+
+
diff --git a/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/keycloak-notification.service.ts b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/keycloak-notification.service.ts
new file mode 100644
index 0000000..db476d9
--- /dev/null
+++ b/themes/src/main/resources/theme/keycloak-preview/account/resources/app/notification/keycloak-notification.service.ts
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2018 Red Hat, Inc. and/or its affiliates
+ * and other contributors as indicated by the @author tags.
+ *
+ * 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.
+ */
+import {Injectable} from '@angular/core';
+import {Router, NavigationEnd} from '@angular/router';
+ 
+import {NotificationService} from 'patternfly-ng/notification/notification-service';
+import {TranslateUtil} from '../ngx-translate/translate.util';
+
+@Injectable()
+export class KeycloakNotificationService extends NotificationService {
+    
+    constructor(router: Router,
+                private translateUtil: TranslateUtil) {
+        super();
+        router.events.subscribe(value => {
+            if (value instanceof NavigationEnd) {
+                this.removeAll();
+            };
+        });
+    }
+    
+    public notify(message: string, notificationType: string, params?: Array<any>) : void {
+        let translatedMessage: string = this.translateUtil.translate(message, params);
+        translatedMessage = translatedMessage.replace("%27", "'");
+        this.message(
+            notificationType, // type
+            null, // header
+            translatedMessage, // message
+            false, // isPersistent
+            null, // Action primaryAction
+            null // Action[] more actions
+        );
+        this.setVerbose(true);
+    }
+    
+    private removeAll(): void {
+        for (let notification of this.getNotifications()) {
+            this.remove(notification);
+        }
+    }
+}
+
+