AddPermissions.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import React, { Component } from 'react';
  2. import { observer } from 'mobx-react';
  3. import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore';
  4. import UserPicker, { User } from 'app/core/components/Picker/UserPicker';
  5. import TeamPicker, { Team } from 'app/core/components/Picker/TeamPicker';
  6. import DescriptionPicker, { OptionWithDescription } from 'app/core/components/Picker/DescriptionPicker';
  7. import { permissionOptions } from 'app/stores/PermissionsStore/PermissionsStore';
  8. export interface IProps {
  9. permissions: any;
  10. backendSrv: any;
  11. dashboardId: any;
  12. }
  13. @observer
  14. class AddPermissions extends Component<IProps, any> {
  15. constructor(props) {
  16. super(props);
  17. this.userPicked = this.userPicked.bind(this);
  18. this.teamPicked = this.teamPicked.bind(this);
  19. this.permissionPicked = this.permissionPicked.bind(this);
  20. this.typeChanged = this.typeChanged.bind(this);
  21. this.handleSubmit = this.handleSubmit.bind(this);
  22. }
  23. componentWillMount() {
  24. const { permissions } = this.props;
  25. permissions.resetNewType();
  26. }
  27. typeChanged(evt) {
  28. const { value } = evt.target;
  29. const { permissions } = this.props;
  30. // if (value === 'Viewer' || value === 'Editor') {
  31. // // permissions.addStoreItem({ permission: 1, role: value, dashboardId: dashboardId }, dashboardId);
  32. // // this.resetNewType();
  33. // return;
  34. // }
  35. permissions.setNewType(value);
  36. }
  37. userPicked(user: User) {
  38. const { permissions } = this.props;
  39. if (!user) {
  40. permissions.newItem.setUser(null, null);
  41. return;
  42. }
  43. return permissions.newItem.setUser(user.id, user.login);
  44. }
  45. teamPicked(team: Team) {
  46. const { permissions } = this.props;
  47. if (!team) {
  48. permissions.newItem.setTeam(null, null);
  49. return;
  50. }
  51. return permissions.newItem.setTeam(team.id, team.name);
  52. }
  53. permissionPicked(permission: OptionWithDescription) {
  54. const { permissions } = this.props;
  55. return permissions.newItem.setPermission(permission.value);
  56. }
  57. resetNewType() {
  58. const { permissions } = this.props;
  59. return permissions.resetNewType();
  60. }
  61. handleSubmit(evt) {
  62. evt.preventDefault();
  63. const { permissions } = this.props;
  64. permissions.addStoreItem();
  65. }
  66. render() {
  67. const { permissions, backendSrv } = this.props;
  68. const newItem = permissions.newItem;
  69. const pickerClassName = 'width-20';
  70. const isValid = newItem.isValid();
  71. return (
  72. <div className="gf-form-inline cta-form">
  73. <button className="cta-form__close btn btn-transparent" onClick={permissions.hideAddPermissions}>
  74. <i className="fa fa-close" />
  75. </button>
  76. <form name="addPermission" onSubmit={this.handleSubmit}>
  77. <h6>Add Permission For</h6>
  78. <div className="gf-form-inline">
  79. <div className="gf-form">
  80. <div className="gf-form-select-wrapper">
  81. <select className="gf-form-input gf-size-auto" value={newItem.type} onChange={this.typeChanged}>
  82. {aclTypes.map((option, idx) => {
  83. return (
  84. <option key={idx} value={option.value}>
  85. {option.text}
  86. </option>
  87. );
  88. })}
  89. </select>
  90. </div>
  91. </div>
  92. {newItem.type === 'User' ? (
  93. <div className="gf-form">
  94. <UserPicker
  95. backendSrv={backendSrv}
  96. handlePicked={this.userPicked}
  97. value={newItem.userId}
  98. className={pickerClassName}
  99. />
  100. </div>
  101. ) : null}
  102. {newItem.type === 'Group' ? (
  103. <div className="gf-form">
  104. <TeamPicker
  105. backendSrv={backendSrv}
  106. handlePicked={this.teamPicked}
  107. value={newItem.teamId}
  108. className={pickerClassName}
  109. />
  110. </div>
  111. ) : null}
  112. <div className="gf-form">
  113. <DescriptionPicker
  114. optionsWithDesc={permissionOptions}
  115. handlePicked={this.permissionPicked}
  116. value={newItem.permission}
  117. disabled={false}
  118. className={'gf-form-input--form-dropdown-right'}
  119. />
  120. </div>
  121. <div className="gf-form">
  122. <button data-save-permission className="btn btn-success" type="submit" disabled={!isValid}>
  123. Save
  124. </button>
  125. </div>
  126. </div>
  127. </form>
  128. {permissions.error ? (
  129. <div className="gf-form width-17">
  130. <span ng-if="ctrl.error" className="text-error p-l-1">
  131. <i className="fa fa-warning" />
  132. {permissions.error}
  133. </span>
  134. </div>
  135. ) : null}
  136. </div>
  137. );
  138. }
  139. }
  140. export default AddPermissions;