diff --git a/backend/src/schema/resolvers/searches.js b/backend/src/schema/resolvers/searches.js index 5c1e43952..d4a2bf02a 100644 --- a/backend/src/schema/resolvers/searches.js +++ b/backend/src/schema/resolvers/searches.js @@ -43,6 +43,16 @@ export default { ` const myQuery = queryString(query) + const tagCypher = ` + CALL db.index.fulltext.queryNodes('tag_fulltext_search', $query) + YIELD node as resource, score + MATCH (resource) + WHERE score >= 0.5 + AND NOT (resource.deleted = true OR resource.disabled = true) + RETURN resource {.*, __typename: labels(resource)[0]} + LIMIT $limit + ` + const session = context.driver.session() const searchResultPromise = session.readTransaction(async transaction => { const postTransactionResponse = transaction.run(postCypher, { @@ -55,14 +65,25 @@ export default { limit, thisUserId, }) - return Promise.all([postTransactionResponse, userTransactionResponse]) + const tagTransactionResponse = transaction.run(tagCypher, { + query: myQuery, + limit, + }) + return Promise.all([ + postTransactionResponse, + userTransactionResponse, + tagTransactionResponse, + ]) }) try { - const [postResults, userResults] = await searchResultPromise + const [postResults, userResults, tagResults] = await searchResultPromise log(postResults) log(userResults) - return [...postResults.records, ...userResults.records].map(r => r.get('resource')) + log(tagResults) + return [...postResults.records, ...userResults.records, ...tagResults.records].map(r => + r.get('resource'), + ) } finally { session.close() } diff --git a/backend/src/schema/types/type/Search.gql b/backend/src/schema/types/type/Search.gql index 2c22fa61f..1ce38001d 100644 --- a/backend/src/schema/types/type/Search.gql +++ b/backend/src/schema/types/type/Search.gql @@ -1,4 +1,4 @@ -union SearchResult = Post | User +union SearchResult = Post | User | Tag type Query { findResources(query: String!, limit: Int = 5): [SearchResult]! diff --git a/webapp/components/Hashtag/Hashtag.vue b/webapp/components/Hashtag/Hashtag.vue index 35762c81c..44e5319f0 100644 --- a/webapp/components/Hashtag/Hashtag.vue +++ b/webapp/components/Hashtag/Hashtag.vue @@ -1,5 +1,5 @@ diff --git a/webapp/components/generic/SearchTag/SearchTag.vue b/webapp/components/generic/SearchTag/SearchTag.vue index d8cfc0b31..a94431eea 100644 --- a/webapp/components/generic/SearchTag/SearchTag.vue +++ b/webapp/components/generic/SearchTag/SearchTag.vue @@ -6,18 +6,18 @@ diff --git a/webapp/components/generic/SearchableInput/SearchableInput.vue b/webapp/components/generic/SearchableInput/SearchableInput.vue index 3260ff082..654deaad4 100644 --- a/webapp/components/generic/SearchableInput/SearchableInput.vue +++ b/webapp/components/generic/SearchableInput/SearchableInput.vue @@ -35,6 +35,12 @@ >

+

+ +

@@ -45,6 +51,7 @@ import { isEmpty } from 'lodash' import SearchHeading from '~/components/generic/SearchHeading/SearchHeading.vue' import SearchPost from '~/components/generic/SearchPost/SearchPost.vue' +import HcHashtag from '~/components/Hashtag/Hashtag.vue' import UserTeaser from '~/components/UserTeaser/UserTeaser.vue' export default { @@ -52,6 +59,7 @@ export default { components: { SearchHeading, SearchPost, + HcHashtag, UserTeaser, }, props: { @@ -77,6 +85,16 @@ export default { return !isEmpty(this.previousSearchTerm) }, }, + watch: { + $route(to, from) { + console.log('to', to) + console.log('from', from) + // console.log(this.finalFilters) + if (to.query.hashtag) { + this.hashtag = to.query.hashtag + } + }, + }, methods: { isFirstOfType(option) { return ( @@ -138,12 +156,20 @@ export default { isPost(item) { return item.__typename === 'Post' }, + isTag(item) { + return item.__typename === 'Tag' + }, goToResource(item) { this.$nextTick(() => { - this.$router.push({ - name: this.isPost(item) ? 'post-id-slug' : 'profile-id-slug', - params: { id: item.id, slug: item.slug }, - }) + if (!this.isTag(item)) { + this.$router.push({ + name: this.isPost(item) ? 'post-id-slug' : 'profile-id-slug', + params: { id: item.id, slug: item.slug }, + }) + } else { + console.log('HIT¡') + this.$router.push('?hashtag=' + item.id) + } }) }, }, diff --git a/webapp/graphql/Search.js b/webapp/graphql/Search.js index 9b142b429..ab34b58b6 100644 --- a/webapp/graphql/Search.js +++ b/webapp/graphql/Search.js @@ -19,6 +19,9 @@ export const findResourcesQuery = gql` ... on User { ...user } + ... on Tag { + id + } } } ` diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 524ee58fa..8f38c2352 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -558,6 +558,35 @@ "message": "Bist Du sicher, dass Du den Kommentar von „{name}“ melden möchtest?", "title": "Kommentar melden", "type": "Kommentar" + "content": { + "unavailable-placeholder": "… dieser Kommentar ist nicht mehr verfügbar" + }, + "menu": { + "edit": "Kommentar bearbeiten", + "delete": "Kommentar löschen" + }, + "show": { + "more": "mehr anzeigen", + "less": "weniger anzeigen" + }, + "edited": "bearbeitet" + }, + "followButton": { + "follow": "Folgen", + "following": "Folge Ich" + }, + "shoutButton": { + "shouted": "empfohlen" + }, + "search": { + "placeholder": "Suchen", + "hint": "Wonach suchst Du?", + "failed": "Nichts gefunden", + "heading": { + "Post": "Beiträge", + "User": "Benutzer", + "Tag": "Hashtags" + } }, "contribution": { "error": "Du hast den Beitrag bereits gemeldet!", diff --git a/webapp/locales/en.json b/webapp/locales/en.json index e6b8def5a..642d0c228 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -549,6 +549,16 @@ "message": "Do you really want to release the user \"{name}\"?", "title": "Release User", "type": "User" + "empty": "Sorry, you don't have any notifications at the moment." + }, + "search": { + "placeholder": "Search", + "hint": "What are you searching for?", + "failed": "Nothing found", + "heading": { + "Post": "Posts", + "User": "Users", + "Tag": "Hashtags" } }, "report": {