CapabilitiesTab.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: admin
  5. * Copyright IBM Corp. 2018
  6. * US Government Users Restricted Rights - Use, duplication or disclosure
  7. * restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['underscore', 'bi/glass/app/ContentView', 'bi/admin/nls/StringResource', 'react-dom', 'react', 'mobx', 'ba-react-admin/ba-react-admin.min'], function (_, ContentView, StringResource, ReactDOM, React, mobx, AdminReact) {
  10. 'use strict'; //NOSONAR: meant to be strict
  11. var CapabilitesTab = ContentView.extend({
  12. init: function init(options) {
  13. CapabilitesTab.inherited('init', this, arguments);
  14. _.extend(this, options);
  15. },
  16. addMembers: function addMembers(membersList) {
  17. var defaultTypes = this.objectInfo.type === 'group' ? ['group', 'account'] : ['group', 'role', 'account'];
  18. this.membersList = membersList;
  19. this.addMemberSlideout = this.glassContext.appController.showSlideOut({
  20. 'parent': this.slideout,
  21. 'width': "450px",
  22. 'content': {
  23. 'module': 'bi/admin/account/slideout/SecurityObjectSelectorPane',
  24. 'parentView': this,
  25. 'objectInfo': [this.objectInfo],
  26. 'allowedSelectionTypes': defaultTypes,
  27. 'multiSelectCallback': this.addSelection.bind(this),
  28. targetType: []
  29. }
  30. });
  31. },
  32. addSelection: function addSelection(selectedItems) {
  33. var tempList = mobx.toJS(this.membersList);
  34. _.each(selectedItems, function (item) {
  35. var memberObject = {
  36. 'label': item.defaultName,
  37. 'searchPath': item.searchPath,
  38. 'type': item.objectClass,
  39. 'openCustomSlideout': false,
  40. 'policyValue': 0,
  41. 'selectionValue': null
  42. };
  43. tempList.push(memberObject);
  44. }.bind(this));
  45. var uniqueList = _.uniq(tempList, function (item, key, a) {
  46. return item.searchPath;
  47. });
  48. this.membersList.replace(uniqueList);
  49. },
  50. setFocus: function setFocus() {},
  51. render: function render() {
  52. this.$el.addClass("reactCapabilitiesView");
  53. ReactDOM.unmountComponentAtNode(this.$el[0]);
  54. this.capabilitiesMemberList = React.createElement(AdminReact.CapabilitiesView, {
  55. 'glassContext': this.glassContext,
  56. 'slideout': this.slideout,
  57. 'StringResource': StringResource,
  58. 'objectInfo': this.objectInfo,
  59. 'parent': this
  60. });
  61. ReactDOM.render(this.capabilitiesMemberList, this.$el[0]);
  62. if (this.slideout.contentView) {
  63. this.slideout.contentView.canHide = this._canHide.bind(this);
  64. }
  65. return Promise.resolve();
  66. },
  67. _canHide: function _canHide() {
  68. var propertyUIControl = this.slideout.contentView.getPropertyUIControl();
  69. if (AdminReact.CapabilitiesMemberStore.forceSlideoutClose) {
  70. AdminReact.CapabilitiesMemberStore.forceSlideoutClose = false;
  71. return propertyUIControl.onClose().then(function () {
  72. return !propertyUIControl.hasValidationError();
  73. }.bind(this));
  74. }
  75. var policySet = true;
  76. if (this.membersList && this.membersList.length > 0) {
  77. _.each(this.membersList, function (item) {
  78. if (item.policyValue === 0) {
  79. policySet = false;
  80. }
  81. }.bind(this));
  82. }
  83. if (!policySet) {
  84. AdminReact.CapabilitiesMemberStore.closeSlideoutDialog = true;
  85. return Promise.resolve(policySet);
  86. } else {
  87. return propertyUIControl.onClose().then(function () {
  88. return !propertyUIControl.hasValidationError();
  89. }.bind(this));
  90. }
  91. },
  92. onClose: function onClose() {
  93. CapabilitesTab.inherited('onClose', this, arguments);
  94. if (this.$el[0]) {
  95. ReactDOM.unmountComponentAtNode(this.$el[0]);
  96. }
  97. }
  98. });
  99. return CapabilitesTab;
  100. });