From 5909baba7c06ebb015f37c0800001b7ab1d71c77 Mon Sep 17 00:00:00 2001 From: Wyatt Benno Date: Thu, 18 Jul 2019 03:40:02 +0000 Subject: Add user search at --- src/components/emoji-input/suggestor.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/components/emoji-input') diff --git a/src/components/emoji-input/suggestor.js b/src/components/emoji-input/suggestor.js index a7ac203e..6d97c5c9 100644 --- a/src/components/emoji-input/suggestor.js +++ b/src/components/emoji-input/suggestor.js @@ -1,20 +1,27 @@ +import { debounce } from 'lodash' /** * suggest - generates a suggestor function to be used by emoji-input * data: object providing source information for specific types of suggestions: * data.emoji - optional, an array of all emoji available i.e. * (state.instance.emoji + state.instance.customEmoji) * data.users - optional, an array of all known users + * updateUsersList - optional, a function to search and append to users * * Depending on data present one or both (or none) can be present, so if field * doesn't support user linking you can just provide only emoji. */ + +const debounceUserSearch = debounce((data, input) => { + data.updateUsersList(input) +}, 500, {leading: true, trailing: false}) + export default data => input => { const firstChar = input[0] if (firstChar === ':' && data.emoji) { return suggestEmoji(data.emoji)(input) } if (firstChar === '@' && data.users) { - return suggestUsers(data.users)(input) + return suggestUsers(data)(input) } return [] } @@ -38,9 +45,11 @@ export const suggestEmoji = emojis => input => { }) } -export const suggestUsers = users => input => { +export const suggestUsers = data => input => { const noPrefix = input.toLowerCase().substr(1) - return users.filter( + const users = data.users + + const newUsers = users.filter( user => user.screen_name.toLowerCase().startsWith(noPrefix) || user.name.toLowerCase().startsWith(noPrefix) @@ -75,5 +84,11 @@ export const suggestUsers = users => input => { imageUrl: profile_image_url_original, replacement: '@' + screen_name + ' ' })) + + // BE search users if there are no matches + if (newUsers.length === 0 && data.updateUsersList) { + debounceUserSearch(data, noPrefix) + } + return newUsers /* eslint-enable camelcase */ } -- cgit v1.2.3-70-g09d2 From 619608ea7aa3314f5918ce48998cd80d4d6bd34f Mon Sep 17 00:00:00 2001 From: shpuld Date: Thu, 18 Jul 2019 17:22:51 +0300 Subject: fix issues caused by merges in usersearch on @ --- src/components/emoji-input/suggestor.js | 2 +- src/services/api/api.service.js | 16 +++++++++++++++- .../backend_interactor_service.js | 4 +++- static/gtr.png | Bin 0 -> 4300 bytes static/shpposter_club.jpg | Bin 0 -> 182566 bytes 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 static/gtr.png create mode 100644 static/shpposter_club.jpg (limited to 'src/components/emoji-input') diff --git a/src/components/emoji-input/suggestor.js b/src/components/emoji-input/suggestor.js index 6d97c5c9..aec5c39d 100644 --- a/src/components/emoji-input/suggestor.js +++ b/src/components/emoji-input/suggestor.js @@ -13,7 +13,7 @@ import { debounce } from 'lodash' const debounceUserSearch = debounce((data, input) => { data.updateUsersList(input) -}, 500, {leading: true, trailing: false}) +}, 500, { leading: true, trailing: false }) export default data => input => { const firstChar = input[0] diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 2de1c3b7..d4ad1c4e 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -68,6 +68,7 @@ const MASTODON_REPORT_USER_URL = '/api/v1/reports' const MASTODON_PIN_OWN_STATUS = id => `/api/v1/statuses/${id}/pin` const MASTODON_UNPIN_OWN_STATUS = id => `/api/v1/statuses/${id}/unpin` const MASTODON_SEARCH_2 = `/api/v2/search` +const MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search' const oldfetch = window.fetch @@ -853,6 +854,18 @@ const reportUser = ({ credentials, userId, statusIds, comment, forward }) => { }) } +const searchUsers = ({ credentials, query }) => { + return promisedRequest({ + url: MASTODON_USER_SEARCH_URL, + params: { + q: query, + resolve: true + }, + credentials + }) + .then((data) => data.map(parseUser)) +} + const search2 = ({ credentials, q, resolve, limit, offset, following }) => { let url = MASTODON_SEARCH_2 let params = [] @@ -960,7 +973,8 @@ const apiService = { fetchRebloggedByUsers, reportUser, updateNotificationSettings, - search2 + search2, + searchUsers } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 4f067df9..bdfe0465 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -150,6 +150,7 @@ const backendInteractorService = credentials => { const unretweet = (id) => apiService.unretweet({ id, credentials }) const search2 = ({ q, resolve, limit, offset, following }) => apiService.search2({ credentials, q, resolve, limit, offset, following }) + const searchUsers = (query) => apiService.searchUsers({ query, credentials }) const backendInteractorServiceInstance = { fetchStatus, @@ -212,7 +213,8 @@ const backendInteractorService = credentials => { retweet, unretweet, updateNotificationSettings, - search2 + search2, + searchUsers } return backendInteractorServiceInstance diff --git a/static/gtr.png b/static/gtr.png new file mode 100644 index 00000000..70bed92a Binary files /dev/null and b/static/gtr.png differ diff --git a/static/shpposter_club.jpg b/static/shpposter_club.jpg new file mode 100644 index 00000000..98e817a6 Binary files /dev/null and b/static/shpposter_club.jpg differ -- cgit v1.2.3-70-g09d2