diff options
| author | shpuld <shp@cock.li> | 2018-12-28 21:39:54 +0200 |
|---|---|---|
| committer | shpuld <shp@cock.li> | 2018-12-28 21:39:54 +0200 |
| commit | 85c058e95c04245dacf3ffb6b45a6eceb3253e7b (patch) | |
| tree | e4a60a67ead56c8d4bdf675bfcb3a1fe914dc7b9 /src/components | |
| parent | 47520818180eb9f0eb8d98fbed716ce8c72a46c1 (diff) | |
New routes, notifications, other impovements in side drwaer
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/chat_panel/chat_panel.js | 3 | ||||
| -rw-r--r-- | src/components/chat_panel/chat_panel.vue | 14 | ||||
| -rw-r--r-- | src/components/nav_panel/nav_panel.js | 1 | ||||
| -rw-r--r-- | src/components/nav_panel/nav_panel.vue | 12 | ||||
| -rw-r--r-- | src/components/notification/notification.js | 5 | ||||
| -rw-r--r-- | src/components/notification/notification.vue | 8 | ||||
| -rw-r--r-- | src/components/notifications/notifications.js | 25 | ||||
| -rw-r--r-- | src/components/notifications/notifications.vue | 2 | ||||
| -rw-r--r-- | src/components/side_drawer/side_drawer.js | 28 | ||||
| -rw-r--r-- | src/components/side_drawer/side_drawer.vue | 103 | ||||
| -rw-r--r-- | src/components/status/status.js | 3 | ||||
| -rw-r--r-- | src/components/status/status.vue | 10 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.js | 2 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.vue | 6 | ||||
| -rw-r--r-- | src/components/user_panel/user_panel.js | 1 | ||||
| -rw-r--r-- | src/components/user_panel/user_panel.vue | 2 | ||||
| -rw-r--r-- | src/components/user_search/user_search.js | 8 | ||||
| -rw-r--r-- | src/components/user_search/user_search.vue | 18 |
18 files changed, 145 insertions, 106 deletions
diff --git a/src/components/chat_panel/chat_panel.js b/src/components/chat_panel/chat_panel.js index e175e90c..d7238641 100644 --- a/src/components/chat_panel/chat_panel.js +++ b/src/components/chat_panel/chat_panel.js @@ -1,6 +1,7 @@ import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' const chatPanel = { + props: [ 'floating' ], data () { return { currentMessage: '', @@ -22,7 +23,7 @@ const chatPanel = { this.collapsed = !this.collapsed }, userProfileLink (user) { - return generateProfileLink(user.id, user.screen_name) + return generateProfileLink(user.id, user.username) } } } diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue index 1b9c63ff..bf65efc5 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -1,10 +1,10 @@ <template> - <div class="chat-panel" v-if="!this.collapsed"> + <div class="chat-panel" v-if="!this.collapsed || !this.floating"> <div class="panel panel-default"> - <div class="panel-heading timeline-heading chat-heading" @click.stop.prevent="togglePanel"> + <div class="panel-heading timeline-heading" :class="{ 'chat-heading': floating }" @click.stop.prevent="togglePanel"> <div class="title"> {{$t('chat.title')}} - <i class="icon-cancel" style="float: right;"></i> + <i class="icon-cancel" style="float: right;" v-if="floating"></i> </div> </div> <div class="chat-window" v-chat-scroll> @@ -52,6 +52,7 @@ right: 0px; bottom: 0px; z-index: 1000; + max-width: 25em; } .chat-heading { @@ -63,10 +64,13 @@ } .chat-window { - width: 345px; - max-height: 40vh; overflow-y: auto; overflow-x: hidden; + max-height: 20em; +} + +.chat-window-container { + height: 100%; } .chat-message { diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js index 19ce56c3..ea5d7ea4 100644 --- a/src/components/nav_panel/nav_panel.js +++ b/src/components/nav_panel/nav_panel.js @@ -1,5 +1,4 @@ const NavPanel = { - props: [ 'activatePanel' ], computed: { currentUser () { return this.$store.state.users.currentUser diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index c52d1e52..ad7c53f9 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -3,32 +3,32 @@ <div class="panel panel-default"> <ul> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'friends' }"> + <router-link :to="{ name: 'friends' }"> {{ $t("nav.timeline") }} </router-link> </li> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'mentions', params: { username: currentUser.screen_name } }"> + <router-link :to="{ name: 'mentions', params: { username: currentUser.screen_name } }"> {{ $t("nav.mentions") }} </router-link> </li> <li v-if='currentUser'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> + <router-link :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> {{ $t("nav.dms") }} </router-link> </li> <li v-if='currentUser && currentUser.locked'> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'friend-requests' }"> + <router-link :to="{ name: 'friend-requests' }"> {{ $t("nav.friend_requests") }} </router-link> </li> <li> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'public-timeline' }"> + <router-link :to="{ name: 'public-timeline' }"> {{ $t("nav.public_tl") }} </router-link> </li> <li> - <router-link @click.native="activatePanel('timeline')" :to="{ name: 'public-external-timeline' }"> + <router-link :to="{ name: 'public-external-timeline' }"> {{ $t("nav.twkn") }} </router-link> </li> diff --git a/src/components/notification/notification.js b/src/components/notification/notification.js index 9ab870b6..8b48ef1d 100644 --- a/src/components/notification/notification.js +++ b/src/components/notification/notification.js @@ -11,10 +11,7 @@ const Notification = { betterShadow: this.$store.state.interface.browserSupport.cssFilter } }, - props: [ - 'notification', - 'activatePanel' - ], + props: [ 'notification' ], components: { Status, StillImage, UserCardContent }, diff --git a/src/components/notification/notification.vue b/src/components/notification/notification.vue index 56791d45..f91c90cc 100644 --- a/src/components/notification/notification.vue +++ b/src/components/notification/notification.vue @@ -1,5 +1,5 @@ <template> - <status :activatePanel="activatePanel" v-if="notification.type === 'mention'" :compact="true" :statusoid="notification.status"></status> + <status v-if="notification.type === 'mention'" :compact="true" :statusoid="notification.status"></status> <div class="non-mention" :class="[userClass, { highlighted: userStyle }]" :style="[ userStyle ]"v-else> <a class='avatar-container' :href="notification.action.user.statusnet_profile_url" @click.stop.prevent.capture="toggleUserExpanded"> <StillImage class='avatar-compact' :class="{'better-shadow': betterShadow}" :src="notification.action.user.profile_image_url_original"/> @@ -25,15 +25,15 @@ <small>{{$t('notifications.followed_you')}}</small> </span> </div> - <small class="timeago"><router-link @click.native="activatePanel('timeline')" v-if="notification.status" :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small> + <small class="timeago"><router-link v-if="notification.status" :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 @click.native="activatePanel('timeline')" :to="userProfileLink(notification.action.user)"> + <router-link :to="userProfileLink(notification.action.user)"> @{{notification.action.user.screen_name}} </router-link> </div> <template v-else> - <status :activatePanel="activatePanel" class="faint" :compact="true" :statusoid="notification.status" :noHeading="true"></status> + <status class="faint" :compact="true" :statusoid="notification.status" :noHeading="true"></status> </template> </div> </div> diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 4b7a591d..ea32bbd0 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -1,10 +1,12 @@ import Notification from '../notification/notification.vue' import notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js' - -import { sortBy, filter } from 'lodash' +import { + notificationsFromStore, + visibleNotificationsFromStore, + unseenNotificationsFromStore +} from '../../services/notification_utils/notification_utils.js' const Notifications = { - props: [ 'activatePanel' ], created () { const store = this.$store const credentials = store.state.users.currentUser.credentials @@ -12,28 +14,17 @@ const Notifications = { notificationsFetcher.startFetching({ store, credentials }) }, computed: { - visibleTypes () { - return [ - this.$store.state.config.notificationVisibility.likes && 'like', - this.$store.state.config.notificationVisibility.mentions && 'mention', - this.$store.state.config.notificationVisibility.repeats && 'repeat', - this.$store.state.config.notificationVisibility.follows && 'follow' - ].filter(_ => _) - }, notifications () { - return this.$store.state.statuses.notifications.data + return notificationsFromStore(this.$store) }, error () { return this.$store.state.statuses.notifications.error }, unseenNotifications () { - return filter(this.visibleNotifications, ({seen}) => !seen) + return unseenNotificationsFromStore(this.$store) }, visibleNotifications () { - // Don't know why, but sortBy([seen, -action.id]) doesn't work. - let sortedNotifications = sortBy(this.notifications, ({action}) => -action.id) - sortedNotifications = sortBy(sortedNotifications, 'seen') - return sortedNotifications.filter((notification) => this.visibleTypes.includes(notification.type)) + return visibleNotificationsFromStore(this.$store) }, unseenCount () { return this.unseenNotifications.length diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue index bef48567..64f18720 100644 --- a/src/components/notifications/notifications.vue +++ b/src/components/notifications/notifications.vue @@ -14,7 +14,7 @@ <div class="panel-body"> <div v-for="notification in visibleNotifications" :key="notification.action.id" class="notification" :class='{"unseen": !notification.seen}'> <div class="notification-overlay"></div> - <notification :activatePanel="activatePanel" :notification="notification"></notification> + <notification :notification="notification"></notification> </div> </div> <div class="panel-footer"> diff --git a/src/components/side_drawer/side_drawer.js b/src/components/side_drawer/side_drawer.js index 96297bb4..82d6d209 100644 --- a/src/components/side_drawer/side_drawer.js +++ b/src/components/side_drawer/side_drawer.js @@ -1,39 +1,43 @@ import UserCardContent from '../user_card_content/user_card_content.vue' +import { unseenNotificationsFromStore } from '../../services/notification_utils/notification_utils' -const deltaX = (oldX, newX) => newX - oldX +const deltaCoord = (oldCoord, newCoord) => [newCoord[0] - oldCoord[0], newCoord[1] - oldCoord[1]] -const touchEventX = e => e.touches[0].screenX +const touchEventCoord = e => ([e.touches[0].screenX, e.touches[0].screenY]) const SideDrawer = { - props: [ 'activatePanel', 'logout' ], + props: [ 'logout' ], data: () => ({ closed: true, - touchX: 0 + touchCoord: [0, 0] }), components: { UserCardContent }, computed: { currentUser () { return this.$store.state.users.currentUser + }, + chat () { return this.$store.state.chat.channel.state === 'joined' }, + unseenNotifications () { + return unseenNotificationsFromStore(this.$store) + }, + unseenNotificationsCount () { + return this.unseenNotifications.length } }, methods: { toggleDrawer () { this.closed = !this.closed }, - gotoPanel (panel) { - this.activatePanel(panel) - this.toggleDrawer() - }, doLogout () { this.logout() - this.gotoPanel('timeline') + this.toggleDrawer() }, touchStart (e) { - this.touchX = touchEventX(e) + this.touchCoord = touchEventCoord(e) }, touchMove (e) { - const delta = deltaX(this.touchX, touchEventX(e)) - if (delta < -30 && !this.closed) { + const delta = deltaCoord(this.touchCoord, touchEventCoord(e)) + if (delta[0] < -30 && Math.abs(delta[1]) < Math.abs(delta[0]) && !this.closed) { this.toggleDrawer() } } diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue index b540e5d8..156c4934 100644 --- a/src/components/side_drawer/side_drawer.vue +++ b/src/components/side_drawer/side_drawer.vue @@ -1,61 +1,77 @@ <template> <div class="side-drawer-container" :class="{ 'side-drawer-container-closed': closed, 'side-drawer-container-open': !closed }"> - <div class="panel panel-default side-drawer" + <div class="side-drawer" :class="{'side-drawer-closed': closed}" @touchstart="touchStart" - @touchmove.prevent="touchMove" + @touchmove="touchMove" > - <div class="side-drawer-heading"> - <user-card-content :activatePanel="activatePanel" :user="currentUser" :switcher="false" :hideBio="true"> + <div class="side-drawer-heading" @click="toggleDrawer"> + <user-card-content :user="currentUser" :switcher="false" :hideBio="true"> </user-card-content> </div> <ul> - <li v-if='currentUser'> - <a href="#" @click="gotoPanel('poststatus')"> + <li v-if="currentUser" @click="toggleDrawer"> + <router-link :to="{ name: 'new-status', params: { username: currentUser.screen_name } }"> {{ $t("post_status.new_status") }} - </a> + </router-link> </li> - <li v-else> - <a href="#" @click="gotoPanel('poststatus')"> + <li v-else @click="toggleDrawer"> + <router-link :to="{ name: 'login' }"> {{ $t("login.login") }} - </a> - </li> - <li v-if='currentUser'> - <a href="#" @click="gotoPanel('notifications')"> - {{ $t("notifications.notifications") }} - </a> + </router-link> </li> - <li v-if='currentUser'> - <router-link @click.native="gotoPanel('timeline')" to='/main/friends'> - {{ $t("nav.timeline") }} + <li v-if="currentUser" @click="toggleDrawer"> + <router-link :to="{ name: 'notifications', params: { username: currentUser.screen_name } }"> + {{ $t("notifications.notifications") }} {{ unseenNotificationsCount > 0 ? `(${unseenNotificationsCount})` : '' }} </router-link> </li> - <li v-if='currentUser'> - <router-link @click.native="gotoPanel('timeline')" :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> + <li v-if="currentUser" @click="toggleDrawer"> + <router-link :to="{ name: 'dms', params: { username: currentUser.screen_name } }"> {{ $t("nav.dms") }} </router-link> </li> - <li v-if='currentUser && currentUser.locked'> - <router-link @click.native="gotoPanel('timeline')" to='/friend-requests'> + <li> + <div class="divider"></div> + </li> + <li v-if="currentUser" @click="toggleDrawer"> + <router-link :to="{ name: 'friends' }"> + {{ $t("nav.timeline") }} + </router-link> + </li> + <li v-if="currentUser && currentUser.locked" @click="toggleDrawer"> + <router-link to='/friend-requests'> {{ $t("nav.friend_requests") }} </router-link> </li> - <li> - <router-link @click.native="gotoPanel('timeline')" to='/main/public'> + <li @click="toggleDrawer"> + <router-link to='/main/public'> {{ $t("nav.public_tl") }} </router-link> </li> - <li> - <router-link @click.native="gotoPanel('timeline')" to='/main/all'> + <li @click="toggleDrawer"> + <router-link to='/main/all'> {{ $t("nav.twkn") }} </router-link> </li> + <li v-if="currentUser && chat" @click="toggleDrawer"> + <router-link :to="{ name: 'chat' }"> + {{ $t("nav.chat") }} + </router-link> + </li> <li> - <router-link @click.native="gotoPanel('timeline')" :to="{ name: 'settings'}"> + <div class="divider"></div> + </li> + <li @click="toggleDrawer"> + <router-link :to="{ name: 'user-search'}"> + {{ $t("nav.user_search") }} + </router-link> + </li> + <li @click="toggleDrawer"> + <router-link :to="{ name: 'settings'}"> {{ $t("settings.settings") }} </router-link> </li> - <li v-if="currentUser"> + <li v-if="currentUser" @click="toggleDrawer"> <a @click="doLogout" href="#"> {{ $t("login.logout") }} </a> @@ -102,9 +118,14 @@ transition: 0.5s; /* 0.5 second transition effect to slide in the sidenav */ transition-timing-function: cubic-bezier(0, 1, 0.5, 1); margin: 0 0 0 -100px; - padding: 0 0 0 100px; - width: 75%; - flex: 0 0 75%; + padding: 0 0 1em 100px; + width: 80%; + max-width: 20em; + flex: 0 0 80%; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.6); + box-shadow: var(--panelShadow); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg); } .side-drawer-click-outside-closed { @@ -115,18 +136,12 @@ margin: 0 0 0 calc(-100% - 100px); } -.side-drawer .panel { - overflow: hidden; - margin: 0; - display: flex; -} - .side-drawer-heading { background: transparent; flex-direction: column; align-items: stretch; display: flex; - min-height: 8em; + min-height: 7em; padding: 0; margin: 0; @@ -147,14 +162,18 @@ } .side-drawer li { - border-bottom: 1px solid; - border-color: $fallback--border; - border-color: var(--border, $fallback--border); padding: 0; + .divider { + border-top: 1px solid; + border-color: $fallback--border; + border-color: var(--border, $fallback--border); + margin: 0.2em 0; + } + a { display: block; - padding: 0.8em 0.85em; + padding: 0.5em 0.85em; &:hover { background-color: $fallback--lightBg; diff --git a/src/components/status/status.js b/src/components/status/status.js index e683056f..71fd0af6 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -21,8 +21,7 @@ const Status = { 'replies', 'noReplyLinks', 'noHeading', - 'inlineExpanded', - 'activatePanel' + 'inlineExpanded' ], data () { return { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 1b102d93..af756801 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -3,7 +3,7 @@ <template v-if="muted && !noReplyLinks"> <div class="media status container muted"> <small> - <router-link @click.native="activatePanel('timeline')" :to="userProfileLink(status.user.id, status.user.screen_name)"> + <router-link :to="userProfileLink(status.user.id, status.user.screen_name)"> {{status.user.screen_name}} </router-link> </small> @@ -38,12 +38,12 @@ <h4 class="user-name" v-if="status.user.name_html" v-html="status.user.name_html"></h4> <h4 class="user-name" v-else>{{status.user.name}}</h4> <span class="links"> - <router-link @click.native="activatePanel('timeline')" :to="userProfileLink(status.user.id, status.user.screen_name)"> + <router-link :to="userProfileLink(status.user.id, status.user.screen_name)"> {{status.user.screen_name}} </router-link> <span v-if="status.in_reply_to_screen_name" class="faint reply-info"> <i class="icon-right-open"></i> - <router-link @click.native="activatePanel('timeline')" :to="userProfileLink(status.in_reply_to_user_id, status.in_reply_to_screen_name)"> + <router-link :to="userProfileLink(status.in_reply_to_user_id, status.in_reply_to_screen_name)"> {{status.in_reply_to_screen_name}} </router-link> </span> @@ -60,7 +60,7 @@ </h4> </div> <div class="media-heading-right"> - <router-link class="timeago" @click.native="activatePanel('timeline')" :to="{ name: 'conversation', params: { id: status.id } }"> + <router-link class="timeago" :to="{ name: 'conversation', params: { id: status.id } }"> <timeago :since="status.created_at" :auto-update="60"></timeago> </router-link> <div class="button-icon visibility-icon" v-if="status.visibility"> @@ -79,7 +79,7 @@ </div> <div v-if="showPreview" class="status-preview-container"> - <status :activatePanel="activatePanel" class="status-preview" v-if="preview" :noReplyLinks="true" :statusoid="preview" :compact=true></status> + <status class="status-preview" v-if="preview" :noReplyLinks="true" :statusoid="preview" :compact=true></status> <div class="status-preview status-preview-loading" v-else> <i class="icon-spin4 animate-spin"></i> </div> diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 75185053..c0d5c515 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -3,7 +3,7 @@ import { hex2rgb } from '../../services/color_convert/color_convert.js' import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator' export default { - props: [ 'user', 'switcher', 'selected', 'hideBio', 'activatePanel' ], + props: [ 'user', 'switcher', 'selected', 'hideBio' ], data () { return { followRequestInProgress: false, diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index c5222519..1f5c9ab6 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -2,20 +2,20 @@ <div id="heading" class="profile-panel-background" :style="headingStyle"> <div class="panel-heading text-center"> <div class='user-info'> - <router-link @click.native="activatePanel && activatePanel('timeline')" :to="{ name: 'user-settings' }" style="float: right; margin-top:16px;" v-if="!isOtherUser"> + <router-link :to="{ name: 'user-settings' }" style="float: right; margin-top:16px;" v-if="!isOtherUser"> <i class="button-icon icon-cog usersettings" :title="$t('tool_tip.user_settings')"></i> </router-link> <a :href="user.statusnet_profile_url" target="_blank" class="floater" v-if="isOtherUser"> <i class="icon-link-ext usersettings"></i> </a> <div class='container'> - <router-link @click.native="activatePanel && activatePanel('timeline')" :to="userProfileLink(user)"> + <router-link :to="userProfileLink(user)"> <StillImage class="avatar" :class='{ "better-shadow": betterShadow }' :src="user.profile_image_url_original"/> </router-link> <div class="name-and-screen-name"> <div :title="user.name" class='user-name' v-if="user.name_html" v-html="user.name_html"></div> <div :title="user.name" class='user-name' v-else>{{user.name}}</div> - <router-link @click.native="activatePanel && activatePanel('timeline')" class='user-screen-name' :to="userProfileLink(user)"> + <router-link class='user-screen-name' :to="userProfileLink(user)"> <span>@{{user.screen_name}}</span><span v-if="user.locked"><i class="icon icon-lock"></i></span> <span v-if="!hideUserStatsLocal" class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span> </router-link> diff --git a/src/components/user_panel/user_panel.js b/src/components/user_panel/user_panel.js index eb7cb09c..15804b88 100644 --- a/src/components/user_panel/user_panel.js +++ b/src/components/user_panel/user_panel.js @@ -3,7 +3,6 @@ import PostStatusForm from '../post_status_form/post_status_form.vue' import UserCardContent from '../user_card_content/user_card_content.vue' const UserPanel = { - props: [ 'activatePanel' ], computed: { user () { return this.$store.state.users.currentUser } }, diff --git a/src/components/user_panel/user_panel.vue b/src/components/user_panel/user_panel.vue index 83eb099f..2d5cb500 100644 --- a/src/components/user_panel/user_panel.vue +++ b/src/components/user_panel/user_panel.vue @@ -1,7 +1,7 @@ <template> <div class="user-panel"> <div v-if='user' class="panel panel-default" style="overflow: visible;"> - <user-card-content :activatePanel="activatePanel" :user="user" :switcher="false" :hideBio="true"></user-card-content> + <user-card-content :user="user" :switcher="false" :hideBio="true"></user-card-content> <div class="panel-footer"> <post-status-form v-if='user'></post-status-form> </div> diff --git a/src/components/user_search/user_search.js b/src/components/user_search/user_search.js index 1e488f0c..9c026276 100644 --- a/src/components/user_search/user_search.js +++ b/src/components/user_search/user_search.js @@ -9,6 +9,7 @@ const userSearch = { ], data () { return { + username: '', users: [] } }, @@ -21,7 +22,14 @@ const userSearch = { } }, methods: { + newQuery (query) { + this.$router.push({ name: 'user-search', query: { query } }) + }, search (query) { + if (!query) { + this.users = [] + return + } userSearchApi.search({query, store: this.$store}) .then((res) => { this.users = res diff --git a/src/components/user_search/user_search.vue b/src/components/user_search/user_search.vue index 20ae84fc..3c2bd3fb 100644 --- a/src/components/user_search/user_search.vue +++ b/src/components/user_search/user_search.vue @@ -3,6 +3,12 @@ <div class="panel-heading"> {{$t('nav.user_search')}} </div> + <div class="user-search-input-container"> + <input class="user-finder-input" @keyup.enter="newQuery(username)" v-model="username" :placeholder="$t('finder.find_user')"/> + <button class="btn search-button" @click="newQuery(username)"> + <i class="icon-search"/> + </button> + </div> <div class="panel-body"> <user-card v-for="user in users" :key="user.id" :user="user" :showFollows="true"></user-card> </div> @@ -10,3 +16,15 @@ </template> <script src="./user_search.js"></script> + +<style lang="scss"> +.user-search-input-container { + margin: 0.5em; + display: flex; + justify-content: center; + + .search-button { + margin-left: 0.5em; + } +} +</style> |
