From 3807ab1b63df390e1badd201e46ac3dd689076a5 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 31 Jul 2020 17:52:26 +0200 Subject: [PATCH 1/8] Allow events to be searched by location and period Signed-off-by: Thomas Citharel --- .../components/Event/AddressAutoComplete.vue | 211 +------ js/src/components/Event/EventCard.vue | 63 +-- .../Event/FullAddressAutoComplete.vue | 296 ++++++++++ js/src/graphql/search.ts | 4 +- js/src/router/event.ts | 5 +- js/src/types/address.model.ts | 7 +- js/src/views/Event/Edit.vue | 6 +- js/src/views/Search.vue | 44 +- lib/federation/activity_pub/transmogrifier.ex | 3 +- lib/graphql/api/search.ex | 29 +- lib/graphql/resolvers/search.ex | 4 +- lib/graphql/schema/search.ex | 5 +- lib/mobilizon/events/events.ex | 42 +- lib/service/guards.ex | 7 + test/graphql/resolvers/search_test.exs | 516 ++++++++++-------- 15 files changed, 749 insertions(+), 493 deletions(-) create mode 100644 js/src/components/Event/FullAddressAutoComplete.vue create mode 100644 lib/service/guards.ex diff --git a/js/src/components/Event/AddressAutoComplete.vue b/js/src/components/Event/AddressAutoComplete.vue index 62aa75e4d..16e6c96df 100644 --- a/js/src/components/Event/AddressAutoComplete.vue +++ b/js/src/components/Event/AddressAutoComplete.vue @@ -1,103 +1,33 @@ diff --git a/js/src/graphql/search.ts b/js/src/graphql/search.ts index c6ea164e1..1dddd51c8 100644 --- a/js/src/graphql/search.ts +++ b/js/src/graphql/search.ts @@ -1,8 +1,8 @@ import gql from "graphql-tag"; export const SEARCH_EVENTS = gql` - query SearchEvents($searchText: String!) { - searchEvents(search: $searchText) { + query SearchEvents($location: String, $radius: Float, $tag: String, $term: String) { + searchEvents(location: $location, radius: $radius, tag: $tag, term: $term) { total elements { title diff --git a/js/src/router/event.ts b/js/src/router/event.ts index beb2616c8..0431c9e30 100644 --- a/js/src/router/event.ts +++ b/js/src/router/event.ts @@ -1,6 +1,7 @@ import { RouteConfig, Route } from "vue-router"; import EventList from "../views/Event/EventList.vue"; import Location from "../views/Location.vue"; +import Search from "../views/Search.vue"; const participations = () => import(/* webpackChunkName: "participations" */ "@/views/Event/Participants.vue"); @@ -112,6 +113,8 @@ export const eventRoutes: RouteConfig[] = [ { path: "/tag/:tag", name: EventRouteName.TAG, - redirect: "/search/:tag", + component: Search, + props: true, + meta: { requiredAuth: false }, }, ]; diff --git a/js/src/types/address.model.ts b/js/src/types/address.model.ts index 2261d7bdd..e320f59a9 100644 --- a/js/src/types/address.model.ts +++ b/js/src/types/address.model.ts @@ -106,9 +106,12 @@ export class Address implements IAddress { return { name, alternativeName, poiIcon }; } - get fullName() { + get fullName(): string { const { name, alternativeName } = this.poiInfos; - return `${name}, ${alternativeName}`; + if (name && alternativeName) { + return `${name}, ${alternativeName}`; + } + return ""; } get iconForPOI(): IPOIIcon { diff --git a/js/src/views/Event/Edit.vue b/js/src/views/Event/Edit.vue index 8b0101f50..60267d537 100644 --- a/js/src/views/Event/Edit.vue +++ b/js/src/views/Event/Edit.vue @@ -29,7 +29,7 @@ {{ $t("Date parameters") }} - +
@@ -329,7 +329,7 @@ import PictureUpload from "@/components/PictureUpload.vue"; import EditorComponent from "@/components/Editor.vue"; import DateTimePicker from "@/components/Event/DateTimePicker.vue"; import TagInput from "@/components/Event/TagInput.vue"; -import AddressAutoComplete from "@/components/Event/AddressAutoComplete.vue"; +import FullAddressAutoComplete from "@/components/Event/FullAddressAutoComplete.vue"; import IdentityPickerWrapper from "@/views/Account/IdentityPickerWrapper.vue"; import Subtitle from "@/components/Utils/Subtitle.vue"; import GroupPickerWrapper from "@/components/Group/GroupPickerWrapper.vue"; @@ -370,7 +370,7 @@ const DEFAULT_LIMIT_NUMBER_OF_PLACES = 10; GroupPickerWrapper, Subtitle, IdentityPickerWrapper, - AddressAutoComplete, + FullAddressAutoComplete, TagInput, DateTimePicker, PictureUpload, diff --git a/js/src/views/Search.vue b/js/src/views/Search.vue index c5240dc90..da4b5cb93 100644 --- a/js/src/views/Search.vue +++ b/js/src/views/Search.vue @@ -1,6 +1,14 @@