diff --git a/lib/graphql/schema/user.ex b/lib/graphql/schema/user.ex index 6d428f2e4..863206dfe 100644 --- a/lib/graphql/schema/user.ex +++ b/lib/graphql/schema/user.ex @@ -332,6 +332,11 @@ defmodule Mobilizon.GraphQL.Schema.UserType do description: "Filter users by current signed-in IP address" ) + arg(:pending_user, :boolean, + default_value: false, + description: "Filter users by pending or not" + ) + arg(:page, :integer, default_value: 1, description: "The page in the paginated users list") arg(:limit, :integer, default_value: 10, description: "The limit of users per page") diff --git a/lib/mobilizon/users/users.ex b/lib/mobilizon/users/users.ex index c512c094e..0a2b5e1c0 100644 --- a/lib/mobilizon/users/users.ex +++ b/lib/mobilizon/users/users.ex @@ -290,6 +290,7 @@ defmodule Mobilizon.Users do @spec list_users(Keyword.t()) :: Page.t(User.t()) def list_users(options) do User + |> filter_by_pending(Keyword.get(options, :pending_user)) |> filter_by_email(Keyword.get(options, :email)) |> filter_by_ip(Keyword.get(options, :current_sign_in_ip)) |> sort(Keyword.get(options, :sort), Keyword.get(options, :direction)) @@ -534,6 +535,11 @@ defmodule Mobilizon.Users do where(User, [u], u.id == ^user_id) end + @spec filter_by_pending(Ecto.Queryable.t(), Boolean.t() | nil) :: Ecto.Query.t() + defp filter_by_pending(query, nil), do: query + defp filter_by_pending(query, true), do: where(query, [q], q.role == :pending) + defp filter_by_pending(query, false), do: where(query, [q], q.role != :pending) + @spec filter_by_email(Ecto.Queryable.t(), String.t() | nil) :: Ecto.Query.t() defp filter_by_email(query, nil), do: query defp filter_by_email(query, ""), do: query diff --git a/src/graphql/user.ts b/src/graphql/user.ts index bcdb2e46d..13628f416 100644 --- a/src/graphql/user.ts +++ b/src/graphql/user.ts @@ -271,6 +271,7 @@ export const LIST_USERS = gql` query ListUsers( $email: String $currentSignInIp: String + $pendingUser: Boolean $page: Int $limit: Int $sort: SortableUserField @@ -279,6 +280,7 @@ export const LIST_USERS = gql` users( email: $email currentSignInIp: $currentSignInIp + pendingUser: $pendingUser page: $page limit: $limit sort: $sort diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 0e2763819..c4b33cb5b 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -854,7 +854,7 @@ "Open user menu": "Open user menu", "Opened reports": "Opened reports", "Open": "Open", - "Options":"Options", + "Options": "Options", "Or": "Or", "Ordered list": "Ordered list", "Organized": "Organized", @@ -1374,6 +1374,7 @@ "User suspended and report resolved": "User suspended and report resolved", "Username": "Username", "Users": "Users", + "Users pending for moderation": "Users pending for moderation", "Validating account": "Validating account", "Validating email": "Validating email", "Video Conference": "Video Conference", diff --git a/src/views/Admin/UsersView.vue b/src/views/Admin/UsersView.vue index 0dab455fe..81b01458f 100644 --- a/src/views/Admin/UsersView.vue +++ b/src/views/Admin/UsersView.vue @@ -10,8 +10,13 @@ ]" />