Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F7893006
users.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
3 KB
Referenced Files
None
Subscribers
None
users.js
View Options
import
backendInteractorService
from
'../services/backend_interactor_service/backend_interactor_service.js'
import
{
compact
,
map
,
each
,
merge
}
from
'lodash'
import
{
set
}
from
'vue'
// TODO: Unify with mergeOrAdd in statuses.js
export
const
mergeOrAdd
=
(
arr
,
obj
,
item
)
=>
{
if
(
!
item
)
{
return
false
}
const
oldItem
=
obj
[
item
.
id
]
if
(
oldItem
)
{
// We already have this, so only merge the new info.
merge
(
oldItem
,
item
)
return
{
item
:
oldItem
,
new
:
false
}
}
else
{
// This is a new item, prepare it
arr
.
push
(
item
)
obj
[
item
.
id
]
=
item
return
{
item
,
new
:
true
}
}
}
export
const
mutations
=
{
setMuted
(
state
,
{
user
:
{
id
},
muted
})
{
const
user
=
state
.
usersObject
[
id
]
set
(
user
,
'muted'
,
muted
)
},
setCurrentUser
(
state
,
user
)
{
state
.
lastLoginName
=
user
.
screen_name
state
.
currentUser
=
merge
(
state
.
currentUser
||
{},
user
)
},
clearCurrentUser
(
state
)
{
state
.
currentUser
=
false
state
.
lastLoginName
=
false
},
beginLogin
(
state
)
{
state
.
loggingIn
=
true
},
endLogin
(
state
)
{
state
.
loggingIn
=
false
},
addNewUsers
(
state
,
users
)
{
each
(
users
,
(
user
)
=>
mergeOrAdd
(
state
.
users
,
state
.
usersObject
,
user
))
},
setUserForStatus
(
state
,
status
)
{
status
.
user
=
state
.
usersObject
[
status
.
user
.
id
]
}
}
export
const
defaultState
=
{
lastLoginName
:
false
,
currentUser
:
false
,
loggingIn
:
false
,
users
:
[],
usersObject
:
{}
}
const
users
=
{
state
:
defaultState
,
mutations
,
actions
:
{
addNewStatuses
(
store
,
{
statuses
})
{
const
users
=
map
(
statuses
,
'user'
)
const
retweetedUsers
=
compact
(
map
(
statuses
,
'retweeted_status.user'
))
store
.
commit
(
'addNewUsers'
,
users
)
store
.
commit
(
'addNewUsers'
,
retweetedUsers
)
// Reconnect users to statuses
each
(
statuses
,
(
status
)
=>
{
store
.
commit
(
'setUserForStatus'
,
status
)
})
// Reconnect users to retweets
each
(
compact
(
map
(
statuses
,
'retweeted_status'
)),
(
status
)
=>
{
store
.
commit
(
'setUserForStatus'
,
status
)
})
},
logout
(
store
)
{
store
.
commit
(
'clearCurrentUser'
)
store
.
dispatch
(
'stopFetching'
,
'friends'
)
store
.
commit
(
'setBackendInteractor'
,
backendInteractorService
())
},
loginUser
(
store
,
userCredentials
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
const
commit
=
store
.
commit
commit
(
'beginLogin'
)
store
.
rootState
.
api
.
backendInteractor
.
verifyCredentials
(
userCredentials
)
.
then
((
response
)
=>
{
if
(
response
.
ok
)
{
response
.
json
()
.
then
((
user
)
=>
{
user
.
credentials
=
userCredentials
commit
(
'setCurrentUser'
,
user
)
commit
(
'addNewUsers'
,
[
user
])
// Set our new backend interactor
commit
(
'setBackendInteractor'
,
backendInteractorService
(
userCredentials
))
// Start getting fresh tweets.
store
.
dispatch
(
'startFetching'
,
'friends'
)
// Get user mutes and follower info
store
.
rootState
.
api
.
backendInteractor
.
fetchMutes
().
then
((
mutedUsers
)
=>
{
each
(
mutedUsers
,
(
user
)
=>
{
user
.
muted
=
true
})
store
.
commit
(
'addNewUsers'
,
mutedUsers
)
})
// Fetch our friends
store
.
rootState
.
api
.
backendInteractor
.
fetchFriends
()
.
then
((
friends
)
=>
commit
(
'addNewUsers'
,
friends
))
})
}
else
{
// Authentication failed
commit
(
'endLogin'
)
if
(
response
.
status
===
401
)
{
reject
(
'Wrong username or password'
)
}
else
{
reject
(
'An error occurred, please try again'
)
}
}
commit
(
'endLogin'
)
resolve
()
})
.
catch
((
error
)
=>
{
console
.
log
(
error
)
commit
(
'endLogin'
)
reject
(
'Failed to connect to server, try again'
)
})
})
}
}
}
export
default
users
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Oct 2, 4:45 AM (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
487316
Default Alt Text
users.js (3 KB)
Attached To
Mode
rPUFE pleroma-fe-upstream
Attached
Detach File
Event Timeline
Log In to Comment