Fixes #3994 - LDAP with many groups (<5k) and group role relation (>50) will crash in frontend.
This commit is contained in:
parent
dbbd3095d7
commit
38f5768eb0
2 changed files with 36 additions and 2 deletions
|
@ -479,7 +479,7 @@ class ConnectionWizard extends App.ControllerWizardModal
|
||||||
|
|
||||||
buildRowGroupRole: (source, dest) =>
|
buildRowGroupRole: (source, dest) =>
|
||||||
el = $(App.view('integration/ldap_group_role_row')())
|
el = $(App.view('integration/ldap_group_role_row')())
|
||||||
el.find('.js-ldapList').html(@createSelection('source', @wizardConfig.wizardData.backend_groups, source))
|
el.find('.js-ldapList').html(@createAutocompletion('source', @wizardConfig.wizardData.backend_groups, source))
|
||||||
el.find('.js-roleList').html(@createSelection('dest', @wizardConfig.wizardData.roles, dest))
|
el.find('.js-roleList').html(@createSelection('dest', @wizardConfig.wizardData.roles, dest))
|
||||||
el
|
el
|
||||||
|
|
||||||
|
@ -496,6 +496,34 @@ class ConnectionWizard extends App.ControllerWizardModal
|
||||||
class: 'form-control--small'
|
class: 'form-control--small'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# LDAP with many groups (<5k) and group role relation (>50) will crash in frontend #3994
|
||||||
|
createAutocompletion: (name, options, selected) ->
|
||||||
|
return App.UiElement.autocompletion.render(
|
||||||
|
id: "#{name}#{Math.floor( Math.random() * 999999 ).toString()}"
|
||||||
|
name: name
|
||||||
|
multiple: false
|
||||||
|
null: false
|
||||||
|
nulloption: false
|
||||||
|
class: 'form-control--small'
|
||||||
|
minLengt: -1 # show values without any value
|
||||||
|
value: selected
|
||||||
|
source: (request, response) ->
|
||||||
|
data = Object.keys(options)
|
||||||
|
counter = 0
|
||||||
|
total = 200
|
||||||
|
result = []
|
||||||
|
for entry in data
|
||||||
|
continue if !entry.includes(request.term)
|
||||||
|
break if counter >= total
|
||||||
|
result.push(
|
||||||
|
id: entry
|
||||||
|
label: entry
|
||||||
|
value: entry
|
||||||
|
)
|
||||||
|
counter++
|
||||||
|
response(result)
|
||||||
|
, "#{name}_autocompletion_value_shown": selected)
|
||||||
|
|
||||||
removeRow: (e) ->
|
removeRow: (e) ->
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
$(e.target).closest('tr').remove()
|
$(e.target).closest('tr').remove()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# coffeelint: disable=camel_case_classes,no_interpolation_in_single_quotes
|
# coffeelint: disable=camel_case_classes,no_interpolation_in_single_quotes
|
||||||
class App.UiElement.autocompletion
|
class App.UiElement.autocompletion
|
||||||
@render: (attribute, params) ->
|
@render: (attribute, params = {}) ->
|
||||||
|
|
||||||
if params[ attribute.name + '_autocompletion_value_shown' ]
|
if params[ attribute.name + '_autocompletion_value_shown' ]
|
||||||
attribute.valueShown = params[ attribute.name + '_autocompletion_value_shown' ]
|
attribute.valueShown = params[ attribute.name + '_autocompletion_value_shown' ]
|
||||||
|
@ -48,5 +48,11 @@ class App.UiElement.autocompletion
|
||||||
select: (event, ui) ->
|
select: (event, ui) ->
|
||||||
b(event, ui.item)
|
b(event, ui.item)
|
||||||
)
|
)
|
||||||
|
$(local_attribute_full).on('click', -> $(@).autocomplete('search', $(local_attribute_full).val()))
|
||||||
|
if attribute.value
|
||||||
|
$(local_attribute).val(attribute.value)
|
||||||
|
if attribute.valueShown
|
||||||
|
$(local_attribute_full).val(attribute.valueShown)
|
||||||
|
|
||||||
App.Delay.set(a, 280, undefined, 'form_autocompletion')
|
App.Delay.set(a, 280, undefined, 'form_autocompletion')
|
||||||
item
|
item
|
||||||
|
|
Loading…
Reference in a new issue