From d0b125064f67f1f0dbbf2411abeab5af273446c8 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Mon, 25 Oct 2021 16:53:46 +0200 Subject: [PATCH] Improvements to group following Signed-off-by: Thomas Citharel --- js/src/components/Utils/EmptyContent.vue | 1 + js/src/graphql/actor.ts | 1 + js/src/mixins/group.ts | 10 ++++- js/src/router/groups.ts | 9 ++++ js/src/views/Group/Group.vue | 53 +++++++++++++++--------- lib/graphql/resolvers/person.ex | 2 +- lib/mobilizon/users/users.ex | 2 + lib/web/auth/guardian.ex | 2 +- 8 files changed, 57 insertions(+), 23 deletions(-) diff --git a/js/src/components/Utils/EmptyContent.vue b/js/src/components/Utils/EmptyContent.vue index 0b5af97b6..60102696e 100644 --- a/js/src/components/Utils/EmptyContent.vue +++ b/js/src/components/Utils/EmptyContent.vue @@ -32,6 +32,7 @@ export default class EmptyContent extends Vue { } &.inline { margin-top: 5vh; + margin-bottom: 2vh; } } diff --git a/js/src/graphql/actor.ts b/js/src/graphql/actor.ts index 43f691a64..eaf444e8c 100644 --- a/js/src/graphql/actor.ts +++ b/js/src/graphql/actor.ts @@ -466,6 +466,7 @@ export const PERSON_STATUS_GROUP = gql` elements { id notify + approved target_actor { id preferredUsername diff --git a/js/src/mixins/group.ts b/js/src/mixins/group.ts index d1b43578e..01eb13cda 100644 --- a/js/src/mixins/group.ts +++ b/js/src/mixins/group.ts @@ -107,11 +107,17 @@ export default class GroupMixin extends Vue { } get isCurrentActorFollowing(): boolean { - return this.currentActorFollow !== null; + return this.currentActorFollow?.approved === true; + } + + get isCurrentActorPendingFollow(): boolean { + return this.currentActorFollow?.approved === false; } get isCurrentActorFollowingNotify(): boolean { - return this.currentActorFollow?.notify === true; + return ( + this.isCurrentActorFollowing && this.currentActorFollow?.notify === true + ); } get currentActorFollow(): IFollower | null { diff --git a/js/src/router/groups.ts b/js/src/router/groups.ts index 7ebdbc828..067b35879 100644 --- a/js/src/router/groups.ts +++ b/js/src/router/groups.ts @@ -18,6 +18,7 @@ export enum GroupsRouteName { POSTS = "POSTS", GROUP_EVENTS = "GROUP_EVENTS", GROUP_JOIN = "GROUP_JOIN", + GROUP_FOLLOW = "GROUP_FOLLOW", TIMELINE = "TIMELINE", } @@ -149,6 +150,14 @@ export const groupsRoutes: RouteConfig[] = [ name: GroupsRouteName.GROUP_JOIN, meta: { requiredAuth: false, announcer: { skip: true } }, }, + { + path: "/@:preferredUsername/follow", + component: (): Promise => + import("@/components/Group/JoinGroupWithAccount.vue"), + props: true, + name: GroupsRouteName.GROUP_FOLLOW, + meta: { requiredAuth: false, announcer: { skip: true } }, + }, { path: "/@:preferredUsername/timeline", name: GroupsRouteName.TIMELINE, diff --git a/js/src/views/Group/Group.vue b/js/src/views/Group/Group.vue index 0e41a6d6f..a2412c8bf 100644 --- a/js/src/views/Group/Group.vue +++ b/js/src/views/Group/Group.vue @@ -164,26 +164,17 @@ type="is-primary" >{{ $t("Join group") }} - - {{ - $t("Follow 1") - }} {{ $t("Follow 2") }}{{ $t("Follow") }} {{ $t("Follow 3") }}{{ $t("Follow") }} + {{ $t("Cancel follow request") }} {{ $t("No public upcoming events") }} + update_user_default_actor_query() |> Repo.update_all(set: [default_actor_id: actor_id]) + Cachex.put(:default_actors, to_string(user_id), actor) + %User{user | default_actor: actor} end diff --git a/lib/web/auth/guardian.ex b/lib/web/auth/guardian.ex index 9709aff9a..446fb5dc9 100644 --- a/lib/web/auth/guardian.ex +++ b/lib/web/auth/guardian.ex @@ -32,7 +32,7 @@ defmodule Mobilizon.Web.Auth.Guardian do try do case Integer.parse(uid_str) do {uid, ""} -> - {:ok, Users.get_user!(uid)} + {:ok, Users.get_user_with_actors!(uid)} _ -> {:error, :invalid_id}