Refactoring wysiwyg mentions service
parent
3e3187dc0a
commit
4a75ed08bd
|
@ -32,82 +32,7 @@ class WysiwygMentionService
|
||||||
|
|
||||||
constructor: (@projectService, @wysiwygService, @navurls, @rs) ->
|
constructor: (@projectService, @wysiwygService, @navurls, @rs) ->
|
||||||
@.cancelablePromise = null
|
@.cancelablePromise = null
|
||||||
|
@.projectSlug = @projectService.project.get('slug')
|
||||||
searchEmoji: (name, cb) ->
|
|
||||||
filteredEmojis = @wysiwygService.searchEmojiByName(name)
|
|
||||||
filteredEmojis = filteredEmojis.slice(0, 10)
|
|
||||||
|
|
||||||
cb(filteredEmojis)
|
|
||||||
|
|
||||||
searchUser: (term, cb) ->
|
|
||||||
searchProps = ['username', 'full_name', 'full_name_display']
|
|
||||||
|
|
||||||
users = @projectService.project.toJS().members.filter (user) =>
|
|
||||||
for prop in searchProps
|
|
||||||
if taiga.slugify(user[prop]).indexOf(term) >= 0
|
|
||||||
return true
|
|
||||||
else if user[prop].indexOf(term) >= 0
|
|
||||||
return true
|
|
||||||
|
|
||||||
return false
|
|
||||||
|
|
||||||
users = users.slice(0, 10).map (it) =>
|
|
||||||
it.url = @navurls.resolve('user-profile', {
|
|
||||||
project: @projectService.project.get('slug'),
|
|
||||||
username: it.username
|
|
||||||
})
|
|
||||||
|
|
||||||
return it
|
|
||||||
|
|
||||||
cb(users)
|
|
||||||
|
|
||||||
searchItem: (term) ->
|
|
||||||
return new Promise (resolve, reject) =>
|
|
||||||
term = taiga.slugify(term)
|
|
||||||
|
|
||||||
searchTypes = ['issues', 'tasks', 'userstories']
|
|
||||||
|
|
||||||
urls = {
|
|
||||||
issues: "project-issues-detail",
|
|
||||||
tasks: "project-tasks-detail",
|
|
||||||
userstories: "project-userstories-detail"
|
|
||||||
}
|
|
||||||
|
|
||||||
searchProps = ['ref', 'subject']
|
|
||||||
|
|
||||||
filter = (item) =>
|
|
||||||
for prop in searchProps
|
|
||||||
if taiga.slugify(item[prop]).indexOf(term) >= 0
|
|
||||||
return true
|
|
||||||
return false
|
|
||||||
|
|
||||||
@.cancelablePromise.abort() if @.cancelablePromise
|
|
||||||
|
|
||||||
@.cancelablePromise = @rs.search.do(@projectService.project.get('id'), term)
|
|
||||||
|
|
||||||
@.cancelablePromise.then (res) =>
|
|
||||||
# ignore wikipages if they're the only results. can't exclude them in search
|
|
||||||
if res.count < 1 or res.count == res.wikipages.length
|
|
||||||
resolve([])
|
|
||||||
else
|
|
||||||
result = []
|
|
||||||
for type in searchTypes
|
|
||||||
if res[type] and res[type].length > 0
|
|
||||||
items = res[type].filter(filter)
|
|
||||||
items = items.map (it) =>
|
|
||||||
it.url = @navurls.resolve(urls[type], {
|
|
||||||
project: @projectService.project.get('slug'),
|
|
||||||
ref: it.ref
|
|
||||||
})
|
|
||||||
|
|
||||||
return it
|
|
||||||
|
|
||||||
result = result.concat(items)
|
|
||||||
|
|
||||||
result = _.sortBy result, ["ref"]
|
|
||||||
|
|
||||||
resolve(result.slice(0, 10))
|
|
||||||
|
|
||||||
|
|
||||||
search: (mention) ->
|
search: (mention) ->
|
||||||
return new Promise (resolve) =>
|
return new Promise (resolve) =>
|
||||||
|
@ -118,5 +43,57 @@ class WysiwygMentionService
|
||||||
else if ':'.indexOf(mention[0]) != -1
|
else if ':'.indexOf(mention[0]) != -1
|
||||||
@.searchEmoji(mention.replace(':', ''), resolve)
|
@.searchEmoji(mention.replace(':', ''), resolve)
|
||||||
|
|
||||||
|
searchItem: (term) ->
|
||||||
|
return new Promise (resolve, reject) =>
|
||||||
|
term = taiga.slugify(term)
|
||||||
|
|
||||||
|
filter = (item) ->
|
||||||
|
return ['subject', 'ref'].some((attr) ->
|
||||||
|
taiga.slugify(item[attr]).indexOf(term) >= 0
|
||||||
|
)
|
||||||
|
|
||||||
|
@rs.search.do(@projectService.project.get('id'), term).then (res) =>
|
||||||
|
result = []
|
||||||
|
if !res.count or res.count == res.wikipages.length
|
||||||
|
resolve(result)
|
||||||
|
else
|
||||||
|
typeURLs = {
|
||||||
|
issues: 'project-issues-detail'
|
||||||
|
userstories: 'project-userstories-detail'
|
||||||
|
tasks: 'project-tasks-detail'
|
||||||
|
}
|
||||||
|
|
||||||
|
for type in ['issues', 'tasks', 'userstories']
|
||||||
|
if not res[type]
|
||||||
|
continue
|
||||||
|
items = res[type].filter(filter).map (item) =>
|
||||||
|
item.url = @navurls.resolve(typeURLs[type], {
|
||||||
|
project: @.projectSlug,
|
||||||
|
ref: item.ref
|
||||||
|
})
|
||||||
|
return item
|
||||||
|
result = result.concat(items)
|
||||||
|
resolve(_.sortBy(result, ["ref"]).slice(0, 10))
|
||||||
|
|
||||||
|
searchUser: (term, callback) ->
|
||||||
|
users = @projectService.project.toJS().members.filter (user) ->
|
||||||
|
return ['username', 'full_name', 'full_name_display'].some((attr) ->
|
||||||
|
taiga.slugify(user[attr]).indexOf(term) >= 0 || user[attr].indexOf(term) >= 0
|
||||||
|
)
|
||||||
|
|
||||||
|
users = users.slice(0, 10).map (item) =>
|
||||||
|
item.url = @navurls.resolve('user-profile', {
|
||||||
|
project: @.projectSlug,
|
||||||
|
username: item.username
|
||||||
|
})
|
||||||
|
return item
|
||||||
|
|
||||||
|
callback(users)
|
||||||
|
|
||||||
|
searchEmoji: (name, callback) ->
|
||||||
|
filteredEmojis = @wysiwygService.searchEmojiByName(name)
|
||||||
|
filteredEmojis = filteredEmojis.slice(0, 10)
|
||||||
|
|
||||||
|
callback(filteredEmojis)
|
||||||
|
|
||||||
angular.module("taigaComponents").service("tgWysiwygMentionService", WysiwygMentionService)
|
angular.module("taigaComponents").service("tgWysiwygMentionService", WysiwygMentionService)
|
||||||
|
|
Loading…
Reference in New Issue