/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import React from 'react'; import Home from './Home'; import Template from './Template'; import { getPermissionTemplates } from '../../../api/permissions'; import { sortPermissions, mergePermissionsToTemplates, mergeDefaultsToTemplates } from '../utils'; import '../../permissions/styles.css'; export default class App extends React.PureComponent { static propTypes = { location: React.PropTypes.object.isRequired, organization: React.PropTypes.object, topQualifiers: React.PropTypes.array.isRequired }; state = { ready: false, permissions: [], permissionTemplates: [] }; componentDidMount() { this.mounted = true; this.requestPermissions(); } componentWillUnmount() { this.mounted = false; } requestPermissions = () => { const { organization } = this.props; const request = organization ? getPermissionTemplates(organization.key) : getPermissionTemplates(); return request.then(r => { if (this.mounted) { const permissions = sortPermissions(r.permissions); const permissionTemplates = mergeDefaultsToTemplates( mergePermissionsToTemplates(r.permissionTemplates, permissions), r.defaultTemplates ); this.setState({ ready: true, permissionTemplates, permissions }); } }); }; renderTemplate(id) { if (!this.state.ready) { return null; } const template = this.state.permissionTemplates.find(t => t.id === id); return (