Extracting sorting modes into its own model

(cherry picked from commit da2ae333c9310645f2e8a08532ba032c00ed25c2)

upstream PR is https://framagit.org/framasoft/mobilizon/-/merge_requests/1236
This commit is contained in:
Gitea 2021-08-21 08:26:14 +02:00 committed by 778a69cd
parent 8e5093ab41
commit 03b2e1f634
2 changed files with 37 additions and 34 deletions

View file

@ -0,0 +1,19 @@
import { EventSortField, SortDirection } from "./enums";
export interface ISorting {
title: string;
orderBy: EventSortField;
direction: SortDirection;
}
export class SortingUpcoming implements ISorting {
title = "Upcoming Events";
orderBy = EventSortField.BEGINS_ON;
direction = SortDirection.ASC;
}
export class SortingCreated implements ISorting {
title = "Recently created Events";
orderBy = EventSortField.INSERTED_AT;
direction = SortDirection.DESC;
}

View file

@ -43,15 +43,7 @@
> >
<section class="events-recent"> <section class="events-recent">
<h2 class="title"> <h2 class="title">
{{ {{ $t(this.sorting.title) }}
$t(
config &&
config.instanceHomepageSorting ===
InstanceHomepageSorting.UPCOMING
? "Upcoming Events"
: "Last published events"
)
}}
</h2> </h2>
<p> <p>
<i18n tag="span" path="On {instance} and other federated instances"> <i18n tag="span" path="On {instance} and other federated instances">
@ -234,15 +226,7 @@
/> />
<section class="events-recent"> <section class="events-recent">
<h2 class="title"> <h2 class="title">
{{ {{ $t(this.sorting.title) }}
$t(
config &&
config.instanceHomepageSorting ===
InstanceHomepageSorting.UPCOMING
? "Upcoming Events"
: "Last published events"
)
}}
</h2> </h2>
<p> <p>
<i18n tag="span" path="On {instance} and other federated instances"> <i18n tag="span" path="On {instance} and other federated instances">
@ -274,12 +258,7 @@
<script lang="ts"> <script lang="ts">
import { Component, Vue, Watch } from "vue-property-decorator"; import { Component, Vue, Watch } from "vue-property-decorator";
import { import { InstanceHomepageSorting, ParticipantRole } from "@/types/enums";
EventSortField,
InstanceHomepageSorting,
ParticipantRole,
SortDirection,
} from "@/types/enums";
import { Paginate } from "@/types/paginate"; import { Paginate } from "@/types/paginate";
import { supportsWebPFormat } from "@/utils/support"; import { supportsWebPFormat } from "@/utils/support";
import { IParticipant, Participant } from "../types/participant.model"; import { IParticipant, Participant } from "../types/participant.model";
@ -299,6 +278,11 @@ import RouteName from "../router/name";
import { IEvent } from "../types/event.model"; import { IEvent } from "../types/event.model";
import DateComponent from "../components/Event/DateCalendarIcon.vue"; import DateComponent from "../components/Event/DateCalendarIcon.vue";
import { CONFIG } from "../graphql/config"; import { CONFIG } from "../graphql/config";
import {
ISorting,
SortingCreated,
SortingUpcoming,
} from "../types/sorting.model";
import { IConfig } from "../types/config.model"; import { IConfig } from "../types/config.model";
import { IFollowedGroupEvent } from "../types/followedGroupEvent.model"; import { IFollowedGroupEvent } from "../types/followedGroupEvent.model";
import Subtitle from "../components/Utils/Subtitle.vue"; import Subtitle from "../components/Utils/Subtitle.vue";
@ -308,16 +292,7 @@ import Subtitle from "../components/Utils/Subtitle.vue";
events: { events: {
query: FETCH_EVENTS, query: FETCH_EVENTS,
variables() { variables() {
return this.config?.instanceHomepageSorting === return this.sorting;
InstanceHomepageSorting.UPCOMING
? {
orderBy: EventSortField.BEGINS_ON,
direction: SortDirection.ASC,
}
: {
orderBy: EventSortField.INSERTED_AT,
direction: SortDirection.DESC,
};
}, },
}, },
currentActor: { currentActor: {
@ -486,6 +461,15 @@ export default class Home extends Vue {
); );
} }
get sorting(): ISorting {
switch (this.config?.instanceHomepageSorting) {
case InstanceHomepageSorting.UPCOMING:
return new SortingUpcoming();
default:
return new SortingCreated();
}
}
get thisWeekGoingToEvents(): IParticipant[] { get thisWeekGoingToEvents(): IParticipant[] {
const res = this.currentUserParticipations.filter( const res = this.currentUserParticipations.filter(
({ event, role }) => ({ event, role }) =>