mirror of
https://git.joinsharkey.org/Sharkey/Sharkey.git
synced 2024-11-27 10:03:08 +02:00
wip
This commit is contained in:
parent
a26c19cbd2
commit
56fa24e401
10 changed files with 67 additions and 75 deletions
|
@ -50,7 +50,7 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="notification.type == 'followRequest'">
|
||||
<template v-if="notification.type == 'reciveFollowRequest'">
|
||||
<mk-avatar class="avatar" :user="notification.user"/>
|
||||
<div class="text">
|
||||
<p>%fa:user-clock%
|
||||
|
@ -268,7 +268,7 @@ root(isDark)
|
|||
.text p i
|
||||
color #53c7ce
|
||||
|
||||
&.followRequest
|
||||
&.reciveFollowRequest
|
||||
.text p i
|
||||
color #888
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<template>
|
||||
<button class="mk-follow-button"
|
||||
:class="{ wait: wait, following: user.isFollowing, unfollow: user.isFollowing }"
|
||||
:class="{ wait: wait, following: u.isFollowing }"
|
||||
@click="onClick"
|
||||
:disabled="wait"
|
||||
>
|
||||
<template v-if="!wait">
|
||||
<template v-if="user.hasPendingFollowRequestFromYou">%fa:hourglass-half% %i18n:@request-pending%</template>
|
||||
<template v-else-if="user.isFollowing">%fa:minus% %i18n:@unfollow%</template>
|
||||
<template v-else-if="!user.isFollowing && user.isLocked">%fa:plus% %i18n:@follow-request%</template>
|
||||
<template v-else-if="!user.isFollowing && !user.isLocked">%fa:plus% %i18n:@follow%</template>
|
||||
<template v-if="u.hasPendingFollowRequestFromYou">%fa:hourglass-half% %i18n:@request-pending%</template>
|
||||
<template v-else-if="u.isFollowing">%fa:minus% %i18n:@unfollow%</template>
|
||||
<template v-else-if="!u.isFollowing && u.isLocked">%fa:plus% %i18n:@follow-request%</template>
|
||||
<template v-else-if="!u.isFollowing && !u.isLocked">%fa:plus% %i18n:@follow%</template>
|
||||
</template>
|
||||
<template v-else>%fa:spinner .pulse .fw%</template>
|
||||
</button>
|
||||
|
@ -25,6 +25,7 @@ export default Vue.extend({
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
u: this.user,
|
||||
wait: false,
|
||||
connection: null,
|
||||
connectionId: null
|
||||
|
@ -45,52 +46,45 @@ export default Vue.extend({
|
|||
methods: {
|
||||
|
||||
onFollow(user) {
|
||||
if (user.id == this.user.id) {
|
||||
this.user.isFollowing = user.isFollowing;
|
||||
if (user.id == this.u.id) {
|
||||
this.u.isFollowing = user.isFollowing;
|
||||
}
|
||||
},
|
||||
|
||||
onUnfollow(user) {
|
||||
if (user.id == this.user.id) {
|
||||
this.user.isFollowing = user.isFollowing;
|
||||
if (user.id == this.u.id) {
|
||||
this.u.isFollowing = user.isFollowing;
|
||||
}
|
||||
},
|
||||
|
||||
onClick() {
|
||||
async onClick() {
|
||||
this.wait = true;
|
||||
if (this.user.isFollowing) {
|
||||
(this as any).api('following/delete', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
this.user.isFollowing = false;
|
||||
}).catch(err => {
|
||||
console.error(err);
|
||||
}).then(() => {
|
||||
this.wait = false;
|
||||
|
||||
try {
|
||||
if (this.u.isFollowing) {
|
||||
this.u = await (this as any).api('following/delete', {
|
||||
userId: this.u.id
|
||||
});
|
||||
} else {
|
||||
if (this.user.isLocked && this.user.hasPendingFollowRequestFromYou) {
|
||||
(this as any).api('following/requests/cancel', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
this.user.hasPendingFollowRequestFromYou = false;
|
||||
}).catch(err => {
|
||||
console.error(err);
|
||||
}).then(() => {
|
||||
this.wait = false;
|
||||
if (this.u.isLocked && this.u.hasPendingFollowRequestFromYou) {
|
||||
this.u = await (this as any).api('following/requests/cancel', {
|
||||
userId: this.u.id
|
||||
});
|
||||
} else if (this.u.isLocked) {
|
||||
this.u = await (this as any).api('following/create', {
|
||||
userId: this.u.id
|
||||
});
|
||||
} else {
|
||||
(this as any).api('following/create', {
|
||||
this.u = await (this as any).api('following/create', {
|
||||
userId: this.user.id
|
||||
}).then(() => {
|
||||
this.user.isFollowing = true;
|
||||
}).catch(err => {
|
||||
console.error(err);
|
||||
}).then(() => {
|
||||
this.wait = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
} finally {
|
||||
this.wait = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -107,6 +101,8 @@ export default Vue.extend({
|
|||
margin 0
|
||||
line-height 36px
|
||||
font-size 14px
|
||||
color $theme-color
|
||||
background transparent
|
||||
outline none
|
||||
border solid 1px $theme-color
|
||||
border-radius 36px
|
||||
|
@ -114,9 +110,9 @@ export default Vue.extend({
|
|||
*
|
||||
pointer-events none
|
||||
|
||||
&.follow
|
||||
color $theme-color
|
||||
background transparent
|
||||
&.following
|
||||
color $theme-color-foreground
|
||||
background $theme-color
|
||||
|
||||
&:hover
|
||||
background rgba($theme-color, 0.1)
|
||||
|
@ -124,10 +120,6 @@ export default Vue.extend({
|
|||
&:active
|
||||
background rgba($theme-color, 0.2)
|
||||
|
||||
&.unfollow
|
||||
color $theme-color-foreground
|
||||
background $theme-color
|
||||
|
||||
&.wait
|
||||
cursor wait !important
|
||||
opacity 0.7
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="notification.type == 'followRequest'">
|
||||
<template v-if="notification.type == 'reciveFollowRequest'">
|
||||
<mk-avatar class="avatar" :user="notification.user"/>
|
||||
<div class="text">
|
||||
<p>%fa:user-clock%{{ notification.user | userName }}</p>
|
||||
|
@ -125,7 +125,7 @@ export default Vue.extend({
|
|||
.text p i
|
||||
color #53c7ce
|
||||
|
||||
&.followRequest
|
||||
&.reciveFollowRequest
|
||||
.text p i
|
||||
color #888
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="notification followRequest" v-if="notification.type == 'followRequest'">
|
||||
<div class="notification followRequest" v-if="notification.type == 'reciveFollowRequest'">
|
||||
<mk-avatar class="avatar" :user="notification.user"/>
|
||||
<div>
|
||||
<header>
|
||||
|
@ -167,7 +167,7 @@ root(isDark)
|
|||
> div > header i
|
||||
color #53c7ce
|
||||
|
||||
&.followRequest
|
||||
&.reciveFollowRequest
|
||||
> div > header i
|
||||
color #888
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Module dependencies
|
||||
*/
|
||||
import $ from 'cafy'; import ID from '../../../../cafy-id';
|
||||
import User from '../../../../models/user';
|
||||
import User, { pack } from '../../../../models/user';
|
||||
import Following from '../../../../models/following';
|
||||
import create from '../../../../services/following/create';
|
||||
|
||||
|
@ -49,5 +49,5 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
|
|||
create(follower, followee);
|
||||
|
||||
// Send response
|
||||
res();
|
||||
res(await pack(followee, user));
|
||||
});
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Module dependencies
|
||||
*/
|
||||
import $ from 'cafy'; import ID from '../../../../cafy-id';
|
||||
import User from '../../../../models/user';
|
||||
import User, { pack } from '../../../../models/user';
|
||||
import Following from '../../../../models/following';
|
||||
import deleteFollowing from '../../../../services/following/delete';
|
||||
|
||||
|
@ -49,5 +49,5 @@ module.exports = (params, user) => new Promise(async (res, rej) => {
|
|||
deleteFollowing(follower, followee);
|
||||
|
||||
// Send response
|
||||
res();
|
||||
res(await pack(followee, user));
|
||||
});
|
||||
|
|
|
@ -6,9 +6,9 @@ import User from '../../../../../models/user';
|
|||
* Accept a follow request
|
||||
*/
|
||||
module.exports = (params, user) => new Promise(async (res, rej) => {
|
||||
// Get 'followerId' parameter
|
||||
const [followerId, followerIdErr] = $.type(ID).get(params.followerId);
|
||||
if (followerIdErr) return rej('invalid followerId param');
|
||||
// Get 'userId' parameter
|
||||
const [followerId, followerIdErr] = $.type(ID).get(params.userId);
|
||||
if (followerIdErr) return rej('invalid userId param');
|
||||
|
||||
// Fetch follower
|
||||
const follower = await User.findOne({
|
||||
|
|
|
@ -1,26 +1,26 @@
|
|||
import $ from 'cafy'; import ID from '../../../../../cafy-id';
|
||||
import cancelFollowRequest from '../../../../../services/following/requests/cancel';
|
||||
import User from '../../../../../models/user';
|
||||
import User, { pack } from '../../../../../models/user';
|
||||
|
||||
/**
|
||||
* Cancel a follow request
|
||||
*/
|
||||
module.exports = (params, user) => new Promise(async (res, rej) => {
|
||||
// Get 'followerId' parameter
|
||||
const [followerId, followerIdErr] = $.type(ID).get(params.followerId);
|
||||
if (followerIdErr) return rej('invalid followerId param');
|
||||
// Get 'userId' parameter
|
||||
const [followeeId, followeeIdErr] = $.type(ID).get(params.userId);
|
||||
if (followeeIdErr) return rej('invalid userId param');
|
||||
|
||||
// Fetch follower
|
||||
const follower = await User.findOne({
|
||||
_id: followerId
|
||||
// Fetch followee
|
||||
const followee = await User.findOne({
|
||||
_id: followeeId
|
||||
});
|
||||
|
||||
if (follower === null) {
|
||||
return rej('follower not found');
|
||||
if (followee === null) {
|
||||
return rej('followee not found');
|
||||
}
|
||||
|
||||
await cancelFollowRequest(user, follower);
|
||||
await cancelFollowRequest(followee, user);
|
||||
|
||||
// Send response
|
||||
res();
|
||||
res(await pack(followee._id, user));
|
||||
});
|
||||
|
|
|
@ -6,9 +6,9 @@ import User from '../../../../../models/user';
|
|||
* Reject a follow request
|
||||
*/
|
||||
module.exports = (params, user) => new Promise(async (res, rej) => {
|
||||
// Get 'followerId' parameter
|
||||
const [followerId, followerIdErr] = $.type(ID).get(params.followerId);
|
||||
if (followerIdErr) return rej('invalid followerId param');
|
||||
// Get 'userId' parameter
|
||||
const [followerId, followerIdErr] = $.type(ID).get(params.userId);
|
||||
if (followerIdErr) return rej('invalid userId param');
|
||||
|
||||
// Fetch follower
|
||||
const follower = await User.findOne({
|
||||
|
|
|
@ -33,10 +33,10 @@ export default async function(follower: IUser, followee: IUser) {
|
|||
|
||||
// Publish reciveRequest event
|
||||
if (isLocalUser(followee)) {
|
||||
packUser(follower, followee).then(packed => event(followee._id, 'reciveRequest', packed)),
|
||||
packUser(follower, followee).then(packed => event(followee._id, 'reciveFollowRequest', packed)),
|
||||
|
||||
// 通知を作成
|
||||
notify(followee._id, follower._id, 'reciveRequest');
|
||||
notify(followee._id, follower._id, 'reciveFollowRequest');
|
||||
}
|
||||
|
||||
if (isLocalUser(follower) && isRemoteUser(followee)) {
|
||||
|
|
Loading…
Reference in a new issue