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 @@
-
+
#{{ id }}
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": {