aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2017-09-05 11:00:00 +0200
committerStas Vilchik <stas.vilchik@sonarsource.com>2017-09-11 11:28:29 +0200
commit71fec25c4056c1dcfe75769c2041b1d56a89a2e5 (patch)
treee640a76709b242652d3cc274a9d0a98f720ae768 /server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx
parent0926670e79d919e0afa3f0a2e11f656bdcd05916 (diff)
downloadsonarqube-71fec25c4056c1dcfe75769c2041b1d56a89a2e5.tar.gz
sonarqube-71fec25c4056c1dcfe75769c2041b1d56a89a2e5.zip
SONAR-9784 rewrite projects management page
Diffstat (limited to 'server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx')
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx68
1 files changed, 68 insertions, 0 deletions
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx
new file mode 100644
index 00000000000..ff6264dce90
--- /dev/null
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/Projects.tsx
@@ -0,0 +1,68 @@
+/*
+ * 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 * as React from 'react';
+import * as classNames from 'classnames';
+import ProjectRow from './ProjectRow';
+import { Project } from './utils';
+import ApplyTemplateView from '../permissions/project/views/ApplyTemplateView';
+import { Organization } from '../../app/types';
+
+interface Props {
+ onProjectDeselected: (project: string) => void;
+ onProjectSelected: (project: string) => void;
+ organization: Organization;
+ projects: Project[];
+ ready?: boolean;
+ selection: string[];
+}
+
+export default class Projects extends React.PureComponent<Props> {
+ onProjectCheck = (project: Project, checked: boolean) => {
+ if (checked) {
+ this.props.onProjectSelected(project.key);
+ } else {
+ this.props.onProjectDeselected(project.key);
+ }
+ };
+
+ onApplyTemplateClick = (project: Project) => {
+ new ApplyTemplateView({ project, organization: this.props.organization }).render();
+ };
+
+ render() {
+ return (
+ <table
+ className={classNames('data', 'zebra', { 'new-loading': !this.props.ready })}
+ id="projects-management-page-projects">
+ <tbody>
+ {this.props.projects.map(project =>
+ <ProjectRow
+ key={project.key}
+ onApplyTemplateClick={this.onApplyTemplateClick}
+ onProjectCheck={this.onProjectCheck}
+ project={project}
+ selected={this.props.selection.includes(project.key)}
+ />
+ )}
+ </tbody>
+ </table>
+ );
+ }
+}