| KB.component('project-select-role', function (containerElement, options) { |
| var isLoading = false; |
| var isSuccess = false; |
| var isError = false; |
| var componentElement; |
|
|
| function onChange(element) { |
| isLoading = true; |
| options.role = element.value; |
| replaceComponentElement(); |
| updateRole(); |
| } |
|
|
| function updateRole() { |
| KB.http.postJson(options.url, { |
| id: options.id, |
| role: options.role |
| }).success(function () { |
| isLoading = false; |
| isSuccess = true; |
| replaceComponentElement(); |
| }).error(function () { |
| isLoading = false; |
| isSuccess = false; |
| isError = true; |
| replaceComponentElement(); |
| }); |
| } |
|
|
| function replaceComponentElement() { |
| KB.dom(componentElement).remove(); |
| componentElement = buildComponentElement(); |
| containerElement.appendChild(componentElement); |
| } |
|
|
| function getAriaLabelValue() { |
| if (options.ariaLabel) { |
| return options.ariaLabel; |
| } |
|
|
| return ''; |
| } |
|
|
| function buildComponentElement() { |
| var roles = []; |
| var container = KB.dom('div'); |
|
|
| for (var role in options.roles) { |
| if (options.roles.hasOwnProperty(role)) { |
| var item = {value: role, text: options.roles[role]}; |
|
|
| if (options.role === role) { |
| item.selected = 'selected'; |
| } |
|
|
| roles.push(item); |
| } |
| } |
|
|
| container.add(KB.dom('select').attr('aria-label', getAriaLabelValue()).change(onChange).for('option', roles).build()); |
|
|
| if (isLoading) { |
| container.text(' '); |
| container.add(KB.dom('i').attr('class', 'fa fa-spinner fa-pulse fa-fw').build()); |
| } else if (isSuccess) { |
| container.text(' '); |
| container.add(KB.dom('i').attr('class', 'fa fa-check fa-fw icon-fade-out icon-success').build()); |
| } else if (isError) { |
| container.text(' '); |
| container.add(KB.dom('i').attr('class', 'fa fa-check fa-fw icon-fade-out icon-error').build()); |
| } |
|
|
| return container.build(); |
| } |
|
|
| this.render = function () { |
| componentElement = buildComponentElement(); |
| containerElement.appendChild(componentElement); |
| }; |
| }); |
|
|