AddPermissions.tsx 4.6 KB

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