2018-04-09 10:44:37 -07:00
import Notification from '../notification/notification.vue'
2018-08-12 04:14:34 -07:00
import notificationsFetcher from '../../services/notifications_fetcher/notifications_fetcher.service.js'
2018-12-28 11:39:54 -08:00
import {
notificationsFromStore ,
visibleNotificationsFromStore ,
unseenNotificationsFromStore
} from '../../services/notification_utils/notification_utils.js'
2016-11-27 10:44:56 -08:00
const Notifications = {
2019-05-15 10:44:35 -07:00
props : {
// Disables display of panel header
noHeading : Boolean ,
// Disables panel styles, unread mark, potentially other notification-related actions
// meant for "Interactions" timeline
minimalMode : Boolean ,
// Custom filter mode, an array of strings, possible values 'mention', 'repeat', 'like', 'follow', used to override global filter for use in "Interactions" timeline
filterMode : Array
2019-05-15 10:49:46 -07:00
} ,
2019-01-29 11:04:52 -08:00
data ( ) {
return {
bottomedOut : false
}
} ,
2016-11-27 10:44:56 -08:00
computed : {
2019-05-14 12:38:16 -07:00
mainClass ( ) {
return this . minimalMode ? '' : 'panel panel-default'
} ,
2017-02-18 11:42:00 -08:00
notifications ( ) {
2018-12-28 11:39:54 -08:00
return notificationsFromStore ( this . $store )
2017-02-18 11:42:00 -08:00
} ,
2018-08-20 10:45:54 -07:00
error ( ) {
return this . $store . state . statuses . notifications . error
} ,
2017-02-18 11:42:00 -08:00
unseenNotifications ( ) {
2018-12-28 11:39:54 -08:00
return unseenNotificationsFromStore ( this . $store )
2017-02-18 11:42:00 -08:00
} ,
2016-11-27 10:44:56 -08:00
visibleNotifications ( ) {
2019-05-14 12:38:16 -07:00
return visibleNotificationsFromStore ( this . $store , this . filterMode )
2017-02-18 11:42:00 -08:00
} ,
unseenCount ( ) {
return this . unseenNotifications . length
2019-01-29 11:04:52 -08:00
} ,
loading ( ) {
return this . $store . state . statuses . notifications . loading
2017-02-18 11:42:00 -08:00
}
} ,
2017-05-31 01:47:18 -07:00
components : {
2018-04-09 10:44:37 -07:00
Notification
2017-05-31 01:47:18 -07:00
} ,
2017-02-18 11:42:00 -08:00
watch : {
unseenCount ( count ) {
2017-02-19 03:19:47 -08:00
if ( count > 0 ) {
this . $store . dispatch ( 'setPageTitle' , ` ( ${ count } ) ` )
} else {
this . $store . dispatch ( 'setPageTitle' , '' )
}
2017-02-18 11:42:00 -08:00
}
} ,
methods : {
markAsSeen ( ) {
2019-03-12 14:16:57 -07:00
this . $store . dispatch ( 'markNotificationsAsSeen' )
} ,
2018-08-12 04:14:34 -07:00
fetchOlderNotifications ( ) {
2019-05-03 04:52:22 -07:00
if ( this . loading ) {
return
}
2018-08-12 04:14:34 -07:00
const store = this . $store
const credentials = store . state . users . currentUser . credentials
2019-01-29 11:04:52 -08:00
store . commit ( 'setNotificationsLoading' , { value : true } )
2018-08-12 04:14:34 -07:00
notificationsFetcher . fetchAndUpdate ( {
store ,
credentials ,
older : true
2019-01-29 11:04:52 -08:00
} ) . then ( notifs => {
store . commit ( 'setNotificationsLoading' , { value : false } )
if ( notifs . length === 0 ) {
this . bottomedOut = true
}
2018-08-12 04:14:34 -07:00
} )
2016-11-27 10:44:56 -08:00
}
}
}
export default Notifications