From 9f1de67f6f74475bc78600a43c9b2ac5ef21c882 Mon Sep 17 00:00:00 2001 From: NikolaiYurchenko Date: Wed, 4 Dec 2019 17:38:43 +0200 Subject: [PATCH] web/storagenode: notification markup Change-Id: Ie1eacd9a0f8c27a2450705833bb248ffe78e9257 --- web/storagenode/src/app/App.vue | 24 ++- .../src/app/components/SNOHeader.vue | 94 +++++++++-- .../notifications/NotificationsPopup.vue | 102 ++++++++++++ .../notifications/SNONotification.vue | 148 +++++++++++++++++ web/storagenode/src/app/router/index.ts | 7 + .../src/app/utils/notificationIcons.ts | 20 +++ .../src/app/views/DashboardArea.vue | 22 +-- .../src/app/views/NotificationsArea.vue | 157 ++++++++++++++++++ .../images/notifications/EmptyState.png | Bin 0 -> 9356 bytes .../static/images/notifications/backArrow.svg | 3 + .../static/images/notifications/bell.svg | 3 + 11 files changed, 543 insertions(+), 37 deletions(-) create mode 100644 web/storagenode/src/app/components/notifications/NotificationsPopup.vue create mode 100644 web/storagenode/src/app/components/notifications/SNONotification.vue create mode 100644 web/storagenode/src/app/utils/notificationIcons.ts create mode 100644 web/storagenode/src/app/views/NotificationsArea.vue create mode 100644 web/storagenode/static/images/notifications/EmptyState.png create mode 100644 web/storagenode/static/images/notifications/backArrow.svg create mode 100644 web/storagenode/static/images/notifications/bell.svg diff --git a/web/storagenode/src/app/App.vue b/web/storagenode/src/app/App.vue index 2aea177f4..ab82a77d9 100644 --- a/web/storagenode/src/app/App.vue +++ b/web/storagenode/src/app/App.vue @@ -3,14 +3,26 @@ @@ -21,6 +33,14 @@ export default class App extends Vue {} font-family: 'font_regular', sans-serif; } + .container { + background-color: #f4f6f9; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + @font-face { font-display: swap; font-family: 'font_regular'; diff --git a/web/storagenode/src/app/components/SNOHeader.vue b/web/storagenode/src/app/components/SNOHeader.vue index b663b22c9..683b84501 100644 --- a/web/storagenode/src/app/components/SNOHeader.vue +++ b/web/storagenode/src/app/components/SNOHeader.vue @@ -13,10 +13,21 @@ -
- Node ID: -

{{this.nodeId}}

+
+
+ Node ID: +

{{this.nodeId}}

+
+
+ + +
+
@@ -24,6 +35,9 @@ + + diff --git a/web/storagenode/src/app/components/notifications/SNONotification.vue b/web/storagenode/src/app/components/notifications/SNONotification.vue new file mode 100644 index 000000000..c386ec260 --- /dev/null +++ b/web/storagenode/src/app/components/notifications/SNONotification.vue @@ -0,0 +1,148 @@ +// Copyright (C) 2019 Storj Labs, Inc. +// See LICENSE for copying information. + + + + + + diff --git a/web/storagenode/src/app/router/index.ts b/web/storagenode/src/app/router/index.ts index c6dd52a38..8b6e5d16b 100644 --- a/web/storagenode/src/app/router/index.ts +++ b/web/storagenode/src/app/router/index.ts @@ -6,11 +6,13 @@ import Router from 'vue-router'; import { NavigationLink } from '@/app/types/navigation'; import DashboardArea from '@/app/views/DashboardArea.vue'; +import NotificationsArea from '@/app/views/NotificationsArea.vue'; Vue.use(Router); export abstract class RouteConfig { public static Root = new NavigationLink('', 'Root'); + public static Notifications = new NavigationLink('/notifications', 'Notifications'); } const router = new Router({ @@ -21,6 +23,11 @@ const router = new Router({ name: RouteConfig.Root.name, component: DashboardArea }, + { + path: RouteConfig.Notifications.path, + name: RouteConfig.Notifications.name, + component: NotificationsArea + }, ] }); diff --git a/web/storagenode/src/app/utils/notificationIcons.ts b/web/storagenode/src/app/utils/notificationIcons.ts new file mode 100644 index 000000000..661726768 --- /dev/null +++ b/web/storagenode/src/app/utils/notificationIcons.ts @@ -0,0 +1,20 @@ +// Copyright (C) 2019 Storj Labs, Inc. +// See LICENSE for copying information. + +export class NotificationIcon { + public static readonly SOFTWARE_UPDATE: string = ` + +`; + + public static readonly DISQUALIFIED: string = ` + +`; + public static readonly FAIL: string = ` + + +`; + + public static readonly INFO: string = ` + +`; +} diff --git a/web/storagenode/src/app/views/DashboardArea.vue b/web/storagenode/src/app/views/DashboardArea.vue index 1f03285c9..68f4d8d43 100644 --- a/web/storagenode/src/app/views/DashboardArea.vue +++ b/web/storagenode/src/app/views/DashboardArea.vue @@ -2,13 +2,9 @@ // See LICENSE for copying information. @@ -17,8 +13,6 @@ import { Component, Vue } from 'vue-property-decorator'; import SNOContentFilling from '@/app/components/SNOContentFilling.vue'; import SNOContentTitle from '@/app/components/SNOContentTitle.vue'; -import SNOFooter from '@/app/components/SNOFooter.vue'; -import SNOHeader from '@/app/components/SNOHeader.vue'; import { NODE_ACTIONS } from '@/app/store/modules/node'; @@ -29,10 +23,8 @@ const { @Component ({ components: { - SNOHeader, SNOContentTitle, SNOContentFilling, - SNOFooter, }, }) export default class Dashboard extends Vue { @@ -44,14 +36,6 @@ export default class Dashboard extends Vue { diff --git a/web/storagenode/static/images/notifications/EmptyState.png b/web/storagenode/static/images/notifications/EmptyState.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f79df7d64ba7a59da62b1e8b7bcbfb2a222540 GIT binary patch literal 9356 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 + + diff --git a/web/storagenode/static/images/notifications/bell.svg b/web/storagenode/static/images/notifications/bell.svg new file mode 100644 index 000000000..3ffa1156c --- /dev/null +++ b/web/storagenode/static/images/notifications/bell.svg @@ -0,0 +1,3 @@ + + +