aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/permission-templates/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/sonar-web/src/main/js/apps/permission-templates/main.js')
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/main.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/main.js b/server/sonar-web/src/main/js/apps/permission-templates/main.js
new file mode 100644
index 00000000000..1a0abfc8ead
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/permission-templates/main.js
@@ -0,0 +1,76 @@
+import _ from 'underscore';
+import React from 'react';
+import Header from './header';
+import PermissionTemplates from './permission-templates';
+import {getPermissionTemplates} from '../../api/permissions';
+
+const PERMISSIONS_ORDER = ['user', 'codeviewer', 'issueadmin', 'admin'];
+
+export default React.createClass({
+ propTypes: {
+ topQualifiers: React.PropTypes.array.isRequired
+ },
+
+ getInitialState() {
+ return { permissions: [], permissionTemplates: [] };
+ },
+
+ componentDidMount() {
+ this.requestPermissions();
+ },
+
+ sortPermissions(permissions) {
+ return _.sortBy(permissions, p => PERMISSIONS_ORDER.indexOf(p.key));
+ },
+
+ mergePermissionsToTemplates(permissionTemplates, basePermissions) {
+ return permissionTemplates.map(permissionTemplate => {
+ // it's important to keep the order of the permission template's permissions
+ // the same as the order of base permissions
+ let permissions = basePermissions.map(basePermission => {
+ let projectPermission = _.findWhere(permissionTemplate.permissions, { key: basePermission.key });
+ return _.extend({ usersCount: 0, groupsCount: 0 }, basePermission, projectPermission);
+ });
+ return _.extend({}, permissionTemplate, { permissions: permissions });
+ });
+ },
+
+ mergeDefaultsToTemplates(permissionTemplates, defaultTemplates = []) {
+ return permissionTemplates.map(permissionTemplate => {
+ let defaultFor = [];
+ defaultTemplates.forEach(defaultTemplate => {
+ if (defaultTemplate.templateId === permissionTemplate.id) {
+ defaultFor.push(defaultTemplate.qualifier);
+ }
+ });
+ return _.extend({}, permissionTemplate, { defaultFor });
+ });
+ },
+
+ requestPermissions() {
+ getPermissionTemplates().done(r => {
+ let permissions = this.sortPermissions(r.permissions);
+ let permissionTemplates = this.mergePermissionsToTemplates(r.permissionTemplates, permissions);
+ let permissionTemplatesWithDefaults = this.mergeDefaultsToTemplates(permissionTemplates, r.defaultTemplates);
+ this.setState({
+ permissionTemplates: permissionTemplatesWithDefaults,
+ permissions: permissions
+ });
+ });
+ },
+
+ render() {
+ return (
+ <div className="page">
+ <Header
+ refresh={this.requestPermissions}/>
+
+ <PermissionTemplates
+ permissionTemplates={this.state.permissionTemplates}
+ permissions={this.state.permissions}
+ topQualifiers={this.props.topQualifiers}
+ refresh={this.requestPermissions}/>
+ </div>
+ );
+ }
+});