From d878513061fbc8a097c833df45206a685a928409 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Tue, 4 Dec 2018 12:10:03 +0100 Subject: [PATCH] rewrite permission templates app in ts --- server/sonar-web/src/main/js/app/types.d.ts | 6 ++ .../components/{App.js => App.tsx} | 39 ++++++----- .../{AppContainer.js => AppContainer.tsx} | 4 +- .../components/{Defaults.js => Defaults.tsx} | 42 +++++------- .../components/{Home.js => Home.tsx} | 53 +++++++-------- .../permission-templates/components/List.js | 55 ---------------- .../permission-templates/components/List.tsx | 51 ++++++++++++++ .../{ListHeader.js => ListHeader.tsx} | 18 ++--- .../components/ListItem.js | 61 ----------------- .../components/ListItem.tsx | 53 +++++++++++++++ .../components/NameCell.js | 64 ------------------ .../components/NameCell.tsx | 57 ++++++++++++++++ .../components/PermissionCell.js | 64 ------------------ .../components/PermissionCell.tsx | 64 ++++++++++++++++++ .../components/{Template.js => Template.tsx} | 58 +++++++++------- .../components/TemplateDetails.js | 53 --------------- .../components/TemplateDetails.tsx | 48 ++++++++++++++ .../components/TemplateHeader.js | 66 ------------------- .../components/TemplateHeader.tsx | 63 ++++++++++++++++++ .../{Defaults-test.js => Defaults-test.tsx} | 18 ++--- ...ts-test.js.snap => Defaults-test.tsx.snap} | 0 .../{utils.js => utils.ts} | 31 +++------ 22 files changed, 470 insertions(+), 498 deletions(-) rename server/sonar-web/src/main/js/apps/permission-templates/components/{App.js => App.tsx} (84%) rename server/sonar-web/src/main/js/apps/permission-templates/components/{AppContainer.js => AppContainer.tsx} (86%) rename server/sonar-web/src/main/js/apps/permission-templates/components/{Defaults.js => Defaults.tsx} (54%) rename server/sonar-web/src/main/js/apps/permission-templates/components/{Home.js => Home.tsx} (50%) delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/List.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/List.tsx rename server/sonar-web/src/main/js/apps/permission-templates/components/{ListHeader.js => ListHeader.tsx} (85%) delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/ListItem.tsx delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/NameCell.tsx delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/PermissionCell.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/PermissionCell.tsx rename server/sonar-web/src/main/js/apps/permission-templates/components/{Template.js => Template.tsx} (83%) delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/TemplateDetails.tsx delete mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.js create mode 100644 server/sonar-web/src/main/js/apps/permission-templates/components/TemplateHeader.tsx rename server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/{Defaults-test.js => Defaults-test.tsx} (71%) rename server/sonar-web/src/main/js/apps/permission-templates/components/__tests__/__snapshots__/{Defaults-test.js.snap => Defaults-test.tsx.snap} (100%) rename server/sonar-web/src/main/js/apps/permission-templates/{utils.js => utils.ts} (74%) diff --git a/server/sonar-web/src/main/js/app/types.d.ts b/server/sonar-web/src/main/js/app/types.d.ts index d96c74fb7d3..e3019db6d73 100644 --- a/server/sonar-web/src/main/js/app/types.d.ts +++ b/server/sonar-web/src/main/js/app/types.d.ts @@ -538,6 +538,12 @@ declare namespace T { export type PeriodMode = 'days' | 'date' | 'version' | 'previous_analysis' | 'previous_version'; + export interface Permission { + description: string; + key: string; + name: string; + } + export interface PermissionDefinition { key: string; name: string; diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/App.js b/server/sonar-web/src/main/js/apps/permission-templates/components/App.tsx similarity index 84% rename from server/sonar-web/src/main/js/apps/permission-templates/components/App.js rename to server/sonar-web/src/main/js/apps/permission-templates/components/App.tsx index d36592db6be..6a1fad79112 100644 --- a/server/sonar-web/src/main/js/apps/permission-templates/components/App.js +++ b/server/sonar-web/src/main/js/apps/permission-templates/components/App.tsx @@ -17,8 +17,8 @@ * 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 PropTypes from 'prop-types'; +import * as React from 'react'; +import { Location } from 'history'; import Home from './Home'; import Template from './Template'; import OrganizationHelmet from '../../../components/common/OrganizationHelmet'; @@ -28,14 +28,21 @@ import { sortPermissions, mergePermissionsToTemplates, mergeDefaultsToTemplates import { translate } from '../../../helpers/l10n'; import '../../permissions/styles.css'; -export default class App extends React.PureComponent { - static propTypes = { - location: PropTypes.object.isRequired, - organization: PropTypes.object, - topQualifiers: PropTypes.array.isRequired - }; +interface Props { + location: Location; + organization: T.Organization | undefined; + topQualifiers: string[]; +} - state = { +interface State { + ready: boolean; + permissions: T.Permission[]; + permissionTemplates: T.PermissionTemplate[]; +} + +export default class App extends React.PureComponent { + mounted = false; + state: State = { ready: false, permissions: [], permissionTemplates: [] @@ -62,21 +69,21 @@ export default class App extends React.PureComponent { mergePermissionsToTemplates(r.permissionTemplates, permissions), r.defaultTemplates ); - this.setState({ - ready: true, - permissionTemplates, - permissions - }); + this.setState({ ready: true, permissionTemplates, permissions }); } }); }; - renderTemplate(id) { + renderTemplate(id: string) { if (!this.state.ready) { return null; } const template = this.state.permissionTemplates.find(t => t.id === id); + if (!template) { + return null; + } + return (