From c214197cee192d9ae511d145d8e28cef8ae9a0d1 Mon Sep 17 00:00:00 2001
From: shpuld <shp@cock.li>
Date: Mon, 9 Apr 2018 20:44:37 +0300
Subject: [PATCH] Separate notification into its own component, fix follow
 notification type

---
 src/components/notification/notification.js   | 24 +++++++++++++
 src/components/notification/notification.vue  | 35 +++++++++++++++++++
 src/components/notifications/notifications.js | 12 ++-----
 .../notifications/notifications.scss          | 12 +++++--
 .../notifications/notifications.vue           | 29 +--------------
 5 files changed, 73 insertions(+), 39 deletions(-)
 create mode 100644 src/components/notification/notification.js
 create mode 100644 src/components/notification/notification.vue

diff --git a/src/components/notification/notification.js b/src/components/notification/notification.js
new file mode 100644
index 00000000..3a274374
--- /dev/null
+++ b/src/components/notification/notification.js
@@ -0,0 +1,24 @@
+import Status from '../status/status.vue'
+import StillImage from '../still-image/still-image.vue'
+import UserCardContent from '../user_card_content/user_card_content.vue'
+
+const Notification = {
+  data () {
+    return {
+      userExpanded: false
+    }
+  },
+  props: [
+    'notification'
+  ],
+  components: {
+    Status, StillImage, UserCardContent
+  },
+  methods: {
+    toggleUserExpanded () {
+      this.userExpanded = !this.userExpanded
+    }
+  }
+}
+
+export default Notification
diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue
new file mode 100644
index 00000000..74563ff9
--- /dev/null
+++ b/src/components/notification/notification.vue
@@ -0,0 +1,35 @@
+<template>
+  <status v-if="notification.type === 'mention'" :compact="true" :statusoid="notification.status"></status>
+  <div class="non-mention" v-else>
+    <a :href="notification.action.user.statusnet_profile_url" @click.stop.prevent.capture="toggleUserExpanded">
+      <StillImage class='avatar-compact' :src="notification.action.user.profile_image_url_original"/>
+    </a>
+    <div class='notification-right'>
+      <div class="base03-border usercard" v-if="userExpanded">
+        <user-card-content :user="notification.action.user" :switcher="false"></user-card-content>
+      </div>
+      <span class="notification-details">
+        <span class="username" :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
+        <span v-if="notification.type === 'favorite'">
+          <i class="fa icon-star lit"></i>
+          <small>{{$t('notifications.favorited_you')}}</small>
+        </span>
+        <span v-if="notification.type === 'repeat'">
+          <i class="fa icon-retweet lit"></i>
+          <small>{{$t('notifications.repeated_you')}}</small>
+        </span>
+        <span v-if="notification.type === 'follow'">
+          <i class="fa icon-user-plus lit"></i>
+          <small>{{$t('notifications.followed_you')}}</small>
+        </span>
+        <small class="timeago"><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
+      </span>
+      <div class="follow-text" v-if="notification.type === 'follow'">
+        <router-link :to="{ name: 'user-profile', params: { id: notification.action.user.id } }">@{{notification.action.user.screen_name}}</router-link>
+      </div>
+      <status v-else class="base04" :compact="true" :statusoid="notification.status" :noHeading="true"></status>
+    </div>
+  </div>
+</template>
+
+<script src="./notification.js"></script>
diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js
index 19f767ab..f8314bfc 100644
--- a/src/components/notifications/notifications.js
+++ b/src/components/notifications/notifications.js
@@ -1,14 +1,11 @@
-import Status from '../status/status.vue'
-import StillImage from '../still-image/still-image.vue'
-import UserCardContent from '../user_card_content/user_card_content.vue'
+import Notification from '../notification/notification.vue'
 
 import { sortBy, take, filter } from 'lodash'
 
 const Notifications = {
   data () {
     return {
-      visibleNotificationCount: 10,
-      userExpanded: false
+      visibleNotificationCount: 20
     }
   },
   computed: {
@@ -29,7 +26,7 @@ const Notifications = {
     }
   },
   components: {
-    Status, StillImage, UserCardContent
+    Notification
   },
   watch: {
     unseenCount (count) {
@@ -43,9 +40,6 @@ const Notifications = {
   methods: {
     markAsSeen () {
       this.$store.commit('markNotificationsAsSeen', this.visibleNotifications)
-    },
-    toggleUserExpanded () {
-      this.userExpanded = !this.userExpanded
     }
   }
 }
diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss
index 73a70a14..b0136426 100644
--- a/src/components/notifications/notifications.scss
+++ b/src/components/notifications/notifications.scss
@@ -41,7 +41,11 @@
       flex: 1;
       flex-wrap: nowrap;
       padding: 0.6em;
+      min-width: 0;
       .status-el {
+        .status {
+          padding: 0.25em 0;
+        }
         padding: 0;
         .status-content.media-body {
           margin: 0;
@@ -49,13 +53,18 @@
       }
     }
 
+    .follow-text {
+      padding: 0.5em 0;
+    }
+
     .status-el {
       flex: 1;
     }
 
     .notification-right {
       flex: 1;
-      margin-left: 0.8em;
+      padding-left: 0.8em;
+      min-width: 0;
     }
 
     .notification-details {
@@ -65,7 +74,6 @@
       position: relative;
       overflow: hidden;
       width: 100%;
-      padding: 0.5em;
       flex: 1;
       flex-wrap: nowrap;
 
diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue
index 99f00032..71fd2604 100644
--- a/src/components/notifications/notifications.vue
+++ b/src/components/notifications/notifications.vue
@@ -8,34 +8,7 @@
       </div>
       <div class="panel-body base03-border">
         <div v-for="notification in visibleNotifications" :key="notification" class="notification" :class='{"unseen": !notification.seen}'>
-          <status v-if="notification.type === 'mention'" :compact="true" :statusoid="notification.status"></status>
-          <div class="non-mention" v-else>
-            <a :href="notification.action.user.statusnet_profile_url" @click.stop.prevent.capture="toggleUserExpanded">
-              <StillImage class='avatar-compact' :src="notification.action.user.profile_image_url_original"/>
-            </a>
-            <div class='notification-right'>
-              <div class="base03-border usercard" v-if="userExpanded">
-                <user-card-content :user="notification.action.user" :switcher="false"></user-card-content>
-              </div>
-              <span class="notification-details">
-                <span class="username" :title="'@'+notification.action.user.screen_name">{{ notification.action.user.name }}</span>
-                <span v-if="notification.type === 'favorite'">
-                  <i class="fa icon-star lit"></i>
-                  <small>{{$t('notifications.favorited_you')}}</small>
-                </span>
-                <span v-if="notification.type === 'repeat'">
-                  <i class="fa icon-retweet lit"></i>
-                  <small>{{$t('notifications.repeated_you')}}</small>
-                </span>
-                <span v-if="notification.type === 'follow'">
-                  <i class="fa icon-user-plus lit"></i>
-                  <small>{{$t('notifications.followed_you')}}</small>
-                </span>
-                <small class="timeago"><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
-              </span>
-              <status class="base04" :compact="true" :statusoid="notification.status" :noHeading="true"></status>
-            </div>
-          </div>
+          <notification :notification="notification"></notification>
         </div>
       </div>
     </div>