Added option to change sorting on homepage to upcoming

(cherry picked from commit f09ede2b820dbce04c036abf582260eafba02795)

upstream PR is https://framagit.org/framasoft/mobilizon/-/merge_requests/1236
This commit is contained in:
Gitea 2021-08-20 00:22:22 +02:00 committed by 778a69cd
parent a2d12990a4
commit 3aa10b77b3
11 changed files with 104 additions and 8 deletions

View file

@ -184,6 +184,7 @@ export const ADMIN_SETTINGS_FRAGMENT = gql`
instanceLongDescription
instanceSlogan
contact
InstanceHomepageSorting
instanceTerms
instanceTermsType
instanceTermsUrl
@ -212,6 +213,7 @@ export const SAVE_ADMIN_SETTINGS = gql`
$instanceLongDescription: String
$instanceSlogan: String
$contact: String
$InstanceHomepageSorting: InstanceHomepageSorting
$instanceTerms: String
$instanceTermsType: InstanceTermsType
$instanceTermsUrl: String
@ -228,6 +230,7 @@ export const SAVE_ADMIN_SETTINGS = gql`
instanceLongDescription: $instanceLongDescription
instanceSlogan: $instanceSlogan
contact: $contact
InstanceHomepageSorting: $InstanceHomepageSorting
instanceTerms: $instanceTerms
instanceTermsType: $instanceTermsType
instanceTermsUrl: $instanceTermsUrl

View file

@ -1,6 +1,6 @@
import type { IEvent } from "@/types/event.model";
import type { IGroup } from "./actor";
import { InstanceTermsType } from "./enums";
import { InstanceTermsType, InstanceHomepageSorting } from "./enums";
export interface IDashboard {
lastPublicEventPublished: IEvent;
@ -25,6 +25,7 @@ export interface IAdminSettings {
instanceSlogan: string;
instanceLongDescription: string;
contact: string;
InstanceHomepageSorting: InstanceHomepageSorting;
instanceTerms: string;
instanceTermsType: InstanceTermsType;
instanceTermsUrl: string | null;

View file

@ -1,4 +1,9 @@
import { InstancePrivacyType, InstanceTermsType, RoutingType } from "./enums";
import {
InstancePrivacyType,
InstanceTermsType,
InstanceHomepageSorting,
RoutingType
} from "./enums";
import type { IProvider } from "./resource";
export interface IOAuthProvider {
@ -79,6 +84,7 @@ export interface IConfig {
provider: string;
autocomplete: boolean;
};
instanceHomepageSorting: InstanceHomepageSorting;
terms: {
bodyHtml: string;
type: InstanceTermsType;

View file

@ -1,4 +1,9 @@
/* eslint-disable no-unused-vars */
export enum InstanceHomepageSorting {
DEFAULT = "DEFAULT",
UPCOMING = "UPCOMING",
}
export enum InstanceTermsType {
DEFAULT = "DEFAULT",
URL = "URL",

View file

@ -64,6 +64,24 @@
<p class="content" v-else>{{ $t("Registration is closed.") }}</p>
</b-switch>
</b-field>
<b-field :label="$t('Home Page Sorting')">
<b-field>
<b-radio
v-model="adminSettings.InstanceHomepageSorting"
name="InstanceHomepageSorting"
:native-value="InstanceHomepageSorting.DEFAULT"
>{{ $t("Recently Created") }}</b-radio
>
</b-field>
<b-field>
<b-radio
v-model="adminSettings.InstanceHomepageSorting"
name="InstanceHomepageSorting"
:native-value="InstanceHomepageSorting.UPCOMING"
>{{ $t("Upcoming") }}</b-radio
>
</b-field>
</b-field>
<div class="field">
<label class="label has-help" for="instance-languages">{{
$t("Instance languages")
@ -375,7 +393,11 @@ import {
SAVE_ADMIN_SETTINGS,
LANGUAGES,
} from "@/graphql/admin";
import { InstancePrivacyType, InstanceTermsType } from "@/types/enums";
import {
InstanceHomepageSorting,
InstancePrivacyType,
InstanceTermsType,
} from "@/types/enums";
import { IAdminSettings, ILanguage } from "../../types/admin.model";
import RouteName from "../../router/name";
@ -419,6 +441,8 @@ export default class Settings extends Vue {
filteredLanguages: string[] = [];
InstanceHomepageSorting = InstanceHomepageSorting;
InstanceTermsType = InstanceTermsType;
InstancePrivacyType = InstancePrivacyType;

View file

@ -226,7 +226,12 @@
/>
<section class="events-recent">
<h2 class="title">
{{ $t("Last published events") }}
{{
adminSettings.instanceHomepageSorting ===
InstanceHomepageSorting.DEFAULT
? $t("Last published events")
: $t("Upcoming Events")
}}
</h2>
<p>
<i18n tag="span" path="On {instance} and other federated instances">
@ -258,7 +263,12 @@
<script lang="ts">
import { Component, Vue, Watch } from "vue-property-decorator";
import { EventSortField, ParticipantRole, SortDirection } from "@/types/enums";
import {
EventSortField,
InstanceHomepageSorting,
ParticipantRole,
SortDirection,
} from "@/types/enums";
import { Paginate } from "@/types/paginate";
import { supportsWebPFormat } from "@/utils/support";
import { IParticipant, Participant } from "../types/participant.model";
@ -274,6 +284,7 @@ import {
} from "../types/current-user.model";
import { CURRENT_USER_CLIENT } from "../graphql/user";
import { CLOSE_CONTENT, HOME_USER_QUERIES } from "../graphql/home";
import { ADMIN_SETTINGS } from "../graphql/admin";
import RouteName from "../router/name";
import { IEvent } from "../types/event.model";
import DateComponent from "../components/Event/DateCalendarIcon.vue";
@ -284,11 +295,20 @@ import Subtitle from "../components/Utils/Subtitle.vue";
@Component({
apollo: {
adminSettings: ADMIN_SETTINGS,
events: {
query: FETCH_EVENTS,
variables: {
orderBy: EventSortField.INSERTED_AT,
direction: SortDirection.DESC,
variables() {
return this.adminSettings?.InstanceHomepageSorting ===
InstanceHomepageSorting.UPCOMING
? {
orderBy: EventSortField.BEGINS_ON,
direction: SortDirection.ASC,
}
: {
orderBy: EventSortField.INSERTED_AT,
direction: SortDirection.DESC,
};
},
},
currentActor: {

View file

@ -114,6 +114,7 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
field(:instance_long_description, :string, description: "The instance's long description")
field(:instance_slogan, :string, description: "The instance's slogan")
field(:contact, :string, description: "The instance's contact details")
field(:instance_homepage_sorting, :instance_homepage_sorting, description: "The instance's homepage sorting")
field(:instance_terms, :string, description: "The instance's terms body text")
field(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
field(:instance_terms_url, :string, description: "The instance's terms URL")
@ -139,6 +140,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
value(:custom, as: "CUSTOM", description: "Custom terms text")
end
@desc "The acceptable values for the instance's homepage type"
enum :instance_homepage_sorting do
value(:default, as: "DEFAULT", description: "Sort by recently created")
value(:upcoming, as: "UPCOMING", description: "Sort by upcoming")
end
@desc """
The acceptable values for the instance privacy policy type
"""
@ -389,6 +396,7 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do
arg(:instance_terms, :string, description: "The instance's terms body text")
arg(:instance_terms_type, :instance_terms_type, description: "The instance's terms type")
arg(:instance_terms_url, :string, description: "The instance's terms URL")
arg(:instance_homepage_sorting, :instance_homepage_sorting, description: "The instance's homepage sorting")
arg(:instance_privacy_policy, :string,
description: "The instance's privacy policy body text"

View file

@ -58,6 +58,8 @@ defmodule Mobilizon.GraphQL.Schema.ConfigType do
resolve(&Config.terms/3)
end
field(:instance_homepage_sorting, :instance_homepage_sorting, description: "The instance's homepage sorting")
field(:privacy, :privacy, description: "The instance's privacy policy") do
arg(:locale, :string,
default_value: "en",

View file

@ -63,6 +63,11 @@ defmodule Mobilizon.Config do
Mobilizon.Admin.get_admin_setting_value("instance", "contact")
end
@spec instance_homepage_sorting :: String.t()
def instance_homepage_sorting do
Mobilizon.Admin.get_admin_setting_value("instance", "instance_homepage_sorting", "DEFAULT")
end
@spec instance_terms(String.t()) :: String.t()
def instance_terms(locale \\ "en") do
Mobilizon.Admin.get_admin_setting_value("instance", "instance_terms", generate_terms(locale))
@ -409,6 +414,7 @@ defmodule Mobilizon.Config do
instance_terms: instance_terms(),
instance_terms_type: instance_terms_type(),
instance_terms_url: instance_terms_url(),
instance_homepage_sorting: instance_homepage_sorting(),
instance_privacy_policy: instance_privacy(),
instance_privacy_policy_type: instance_privacy_type(),
instance_privacy_policy_url: instance_privacy_url(),

View file

@ -229,6 +229,9 @@ type Config {
locale: String
): Terms
"The instance's homepage sorting"
instanceHomepageSorting: InstanceHomepageSorting
"The instance's privacy policy"
privacy(
"The user's locale. The privacy policy will be translated in their language, if available."
@ -269,6 +272,15 @@ type Tag {
related: [Tag]
}
"The acceptable values for the instance's homepage type"
enum InstanceHomepageSorting {
"Sort by recently created"
DEFAULT
"Sort by upcoming"
UPCOMING
}
"Instance map routing configuration"
type Routing {
"The instance's routing type"
@ -1950,6 +1962,9 @@ type RootMutationType {
"The instance's terms URL"
instanceTermsUrl: String
"The instance's homepage sorting"
instanceHomepageSorting: InstanceHomepageSorting
"The instance's privacy policy body text"
instancePrivacyPolicy: String
@ -3805,6 +3820,9 @@ type AdminSettings {
"The instance's contact details"
contact: String
"The instance's homepage sorting"
instanceHomepageSorting: InstanceHomepageSorting
"The instance's terms body text"
instanceTerms: String

View file

@ -337,6 +337,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
instanceDescription
instanceLongDescription
contact
InstanceHomepageSorting
instanceTerms
instanceTermsType
instanceTermsUrl
@ -419,6 +420,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
$instanceDescription: String
$instanceLongDescription: String
$contact: String
$InstanceHomepageSorting: InstanceHomepageSorting
$instanceTerms: String
$instanceTermsType: InstanceTermsType
$instanceTermsUrl: String
@ -433,6 +435,7 @@ defmodule Mobilizon.GraphQL.Resolvers.AdminTest do
instanceDescription: $instanceDescription
instanceLongDescription: $instanceLongDescription
contact: $contact
InstanceHomepageSorting: $InstanceHomepageSorting
instanceTerms: $instanceTerms
instanceTermsType: $instanceTermsType
instanceTermsUrl: $instanceTermsUrl