aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-vsts/package.json2
-rw-r--r--server/sonar-vsts/yarn.lock90
-rw-r--r--server/sonar-web/package.json11
-rw-r--r--server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts4
-rw-r--r--server/sonar-web/src/main/js/apps/about/sonarcloud/Contact.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/account/notifications/Projects.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/account/profile/UserDeleteAccountModal.tsx13
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/StatusFilter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/TypesFilter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/components/OrganizationAvatarInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/components/OrganizationKeyInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/components/OrganizationSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/components/OrganizationUrlInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/components/ProjectKeyInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/create/organization/RemoteOrganizationChoose.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/custom-measures/components/Form.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/custom-metrics/components/Form.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/overview/badges/BadgeParams.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/components/App.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaContainer.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/permissions/project/components/ApplyTemplate.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityGraphsHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-gates/components/ConditionOperator.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-gates/components/MetricSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-gates/components/ThresholdInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/webhooks/components/CreateWebhookForm.tsx21
-rw-r--r--server/sonar-web/src/main/js/apps/webhooks/components/DeliveryAccordion.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/webhooks/components/__tests__/__snapshots__/CreateWebhookForm-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/components/controls/BoxedGroupAccordion.tsx78
-rw-r--r--server/sonar-web/src/main/js/components/controls/DateInput.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/controls/SearchSelect.tsx154
-rw-r--r--server/sonar-web/src/main/js/components/controls/Select.tsx59
-rw-r--r--server/sonar-web/src/main/js/components/controls/ValidationForm.tsx72
-rw-r--r--server/sonar-web/src/main/js/components/controls/ValidationInput.tsx60
-rw-r--r--server/sonar-web/src/main/js/components/controls/ValidationModal.tsx83
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/BoxedGroupAccordion-test.tsx52
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/SearchSelect-test.tsx50
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/ValidationForm-test.tsx47
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/ValidationInput-test.tsx73
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx47
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/BoxedGroupAccordion-test.tsx.snap26
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.tsx.snap17
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationForm-test.tsx.snap19
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationInput-test.tsx.snap104
-rw-r--r--server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationModal-test.tsx.snap21
-rw-r--r--server/sonar-web/src/main/js/components/controls/react-select.css483
-rw-r--r--server/sonar-web/yarn.lock28
69 files changed, 150 insertions, 1561 deletions
diff --git a/server/sonar-vsts/package.json b/server/sonar-vsts/package.json
index 169465adab8..bbeecefabc0 100644
--- a/server/sonar-vsts/package.json
+++ b/server/sonar-vsts/package.json
@@ -12,7 +12,7 @@
"react": "16.8.6",
"react-dom": "16.8.6",
"regenerator-runtime": "0.13.2",
- "sonar-ui-common": "0.0.10",
+ "sonar-ui-common": "0.0.13",
"whatwg-fetch": "2.0.4"
},
"devDependencies": {
diff --git a/server/sonar-vsts/yarn.lock b/server/sonar-vsts/yarn.lock
index 84f9704ff07..cdb38f45a8e 100644
--- a/server/sonar-vsts/yarn.lock
+++ b/server/sonar-vsts/yarn.lock
@@ -1018,6 +1018,13 @@
dependencies:
"@types/react" "*"
+"@types/react-select@1.2.6":
+ version "1.2.6"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/react-select/-/react-select-1.2.6.tgz#8a9579705e04b2c15ce529379402980d80e9d243"
+ integrity sha1-ipV5cF4EssFc5Sk3lAKYDYDp0kM=
+ dependencies:
+ "@types/react" "*"
+
"@types/react@*", "@types/react@16.8.23":
version "16.8.23"
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2"
@@ -2194,7 +2201,7 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-classnames@2.2.6, classnames@^2.2.3, classnames@^2.2.5:
+classnames@2.2.6, classnames@^2.2.3, classnames@^2.2.4, classnames@^2.2.5:
version "2.2.6"
resolved "https://repox.jfrog.io/repox/api/npm/npm/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
integrity sha1-Q5Nb/90pHzJtrQogUwmzjQD2UM4=
@@ -2544,6 +2551,14 @@ create-react-class@^15.5.1:
loose-envify "^1.3.1"
object-assign "^4.1.1"
+create-react-context@^0.2.2:
+ version "0.2.3"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3"
+ integrity sha1-nsFAppFKIu8EuLCbd3HeiVZ8tvM=
+ dependencies:
+ fbjs "^0.8.0"
+ gud "^1.0.0"
+
cross-spawn@5.1.0:
version "5.1.0"
resolved "https://repox.jfrog.io/repox/api/npm/npm/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
@@ -2977,6 +2992,11 @@ deep-is@~0.1.3:
resolved "https://repox.jfrog.io/repox/api/npm/npm/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+deepmerge@^2.1.1:
+ version "2.2.1"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170"
+ integrity sha1-XT/yKgHAD2RUBaL7wX0HeKGAEXA=
+
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://repox.jfrog.io/repox/api/npm/npm/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
@@ -3867,7 +3887,7 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
-fbjs@^0.8.9:
+fbjs@^0.8.0, fbjs@^0.8.9:
version "0.8.17"
resolved "https://repox.jfrog.io/repox/api/npm/npm/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
@@ -4013,6 +4033,21 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
+formik@1.2.0:
+ version "1.2.0"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/formik/-/formik-1.2.0.tgz#a0daf8512ce2ec18d88ff59a5bb172b0167e85d1"
+ integrity sha1-oNr4USzi7BjYj/WaW7FysBZ+hdE=
+ dependencies:
+ create-react-context "^0.2.2"
+ deepmerge "^2.1.1"
+ hoist-non-react-statics "^2.5.5"
+ lodash.clonedeep "^4.5.0"
+ lodash.topath "4.5.2"
+ prop-types "^15.6.1"
+ react-fast-compare "^1.0.0"
+ tslib "^1.9.3"
+ warning "^3.0.0"
+
forwarded@~0.1.2:
version "0.1.2"
resolved "https://repox.jfrog.io/repox/api/npm/npm/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@@ -4210,6 +4245,11 @@ growly@^1.3.0:
resolved "https://repox.jfrog.io/repox/api/npm/npm/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha1-pIlYGxfmpwvsqavjrlfeekmYUsA=
+
gzip-size@3.0.0:
version "3.0.0"
resolved "https://repox.jfrog.io/repox/api/npm/npm/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
@@ -5759,6 +5799,11 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
lodash.escape@^4.0.1:
version "4.0.1"
resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
@@ -5784,6 +5829,11 @@ lodash.sortby@^4.7.0:
resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+lodash.topath@4.5.2:
+ version "4.5.2"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009"
+ integrity sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=
+
lodash.unescape@4.0.1:
version "4.0.1"
resolved "https://repox.jfrog.io/repox/api/npm/npm/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
@@ -7308,7 +7358,7 @@ prop-types-exact@^1.2.0:
object.assign "^4.1.0"
reflect.ownkeys "^0.2.0"
-prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2:
+prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.7.2"
resolved "https://repox.jfrog.io/repox/api/npm/npm/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha1-UsQedbjIfnK52TYOAga5ncv/psU=
@@ -7574,6 +7624,18 @@ react-error-overlay@^4.0.0:
resolved "https://repox.jfrog.io/repox/api/npm/npm/react-error-overlay/-/react-error-overlay-4.0.1.tgz#417addb0814a90f3a7082eacba7cee588d00da89"
integrity sha1-QXrdsIFKkPOnCC6sunzuWI0A2ok=
+react-fast-compare@^1.0.0:
+ version "1.0.0"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/react-fast-compare/-/react-fast-compare-1.0.0.tgz#813a039155e49b43ceffe99528fe5e9d97a6c938"
+ integrity sha1-gToDkVXkm0PO/+mVKP5enZemyTg=
+
+react-input-autosize@^2.1.2:
+ version "2.2.1"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"
+ integrity sha1-7EKPoVsVkplPtfmqFbsetrr0IPg=
+ dependencies:
+ prop-types "^15.5.8"
+
react-intl@2.8.0:
version "2.8.0"
resolved "https://repox.jfrog.io/repox/api/npm/npm/react-intl/-/react-intl-2.8.0.tgz#20b0c1f01d1292427768aa8ec9e51ab7e36503ba"
@@ -7618,6 +7680,15 @@ react-router@3.2.1:
prop-types "^15.5.6"
warning "^3.0.0"
+react-select@1.2.1:
+ version "1.2.1"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/react-select/-/react-select-1.2.1.tgz#a2fe58a569eb14dcaa6543816260b97e538120d1"
+ integrity sha1-ov5YpWnrFNyqZUOBYmC5flOBINE=
+ dependencies:
+ classnames "^2.2.4"
+ prop-types "^15.5.8"
+ react-input-autosize "^2.1.2"
+
react-test-renderer@16.8.5:
version "16.8.5"
resolved "https://repox.jfrog.io/repox/api/npm/npm/react-test-renderer/-/react-test-renderer-16.8.5.tgz#4cba7a8aad73f7e8a0bc4379a0fe21632886a563"
@@ -8345,11 +8416,12 @@ sockjs@0.3.19:
faye-websocket "^0.10.0"
uuid "^3.0.1"
-sonar-ui-common@0.0.10:
- version "0.0.10"
- resolved "https://repox.jfrog.io/repox/api/npm/npm/sonar-ui-common/-/sonar-ui-common-0.0.10.tgz#c51643ff14232d7ef8669bb553a4c694bd2b7c0c"
- integrity sha1-xRZD/xQjLX74Zpu1U6TGlL0rfAw=
+sonar-ui-common@0.0.13:
+ version "0.0.13"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/sonar-ui-common/-/sonar-ui-common-0.0.13.tgz#b01255f32d7863e529117bfe715890edfcdb8c97"
+ integrity sha1-sBJV8y14Y+UpEXv+cViQ7fzbjJc=
dependencies:
+ "@types/react-select" "1.2.6"
classnames "2.2.6"
clipboard "2.0.4"
d3-array "1.2.4"
@@ -8359,12 +8431,14 @@ sonar-ui-common@0.0.10:
d3-shape "1.2.2"
d3-zoom "1.7.3"
date-fns "1.30.1"
+ formik "1.2.0"
history "3.3.0"
lodash "4.17.11"
react-draggable "3.2.1"
react-intl "2.8.0"
react-modal "3.8.2"
react-router "3.2.1"
+ react-select "1.2.1"
react-virtualized "9.21.0"
source-list-map@^2.0.0:
@@ -8937,7 +9011,7 @@ ts-loader@5.3.3:
micromatch "^3.1.4"
semver "^5.0.1"
-tslib@^1.9.0:
+tslib@^1.9.0, tslib@^1.9.3:
version "1.10.0"
resolved "https://repox.jfrog.io/repox/api/npm/npm/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=
diff --git a/server/sonar-web/package.json b/server/sonar-web/package.json
index 6f5aeccd46d..5c55d499fec 100644
--- a/server/sonar-web/package.json
+++ b/server/sonar-web/package.json
@@ -9,14 +9,9 @@
"core-js": "3.0.0",
"create-react-class": "15.6.3",
"d3-array": "1.2.4",
- "d3-hierarchy": "1.1.8",
"d3-scale": "2.1.2",
- "d3-selection": "1.4.0",
- "d3-shape": "1.2.2",
- "d3-zoom": "1.7.3",
"date-fns": "1.30.1",
"dompurify": "1.0.11",
- "formik": "1.2.0",
"history": "3.3.0",
"intl-relativeformat": "2.1.0",
"keymaster": "1.6.2",
@@ -33,7 +28,6 @@
"react-intl": "2.8.0",
"react-redux": "5.1.1",
"react-router": "3.2.1",
- "react-select": "1.2.1",
"react-virtualized": "9.21.0",
"redux": "4.0.1",
"redux-logger": "3.0.6",
@@ -41,7 +35,7 @@
"regenerator-runtime": "0.13.2",
"remark-custom-blocks": "2.3.0",
"remark-slug": "5.1.0",
- "sonar-ui-common": "0.0.11",
+ "sonar-ui-common": "0.0.13",
"unist-util-visit": "1.4.0",
"valid-url": "1.0.9",
"whatwg-fetch": "2.0.4"
@@ -58,10 +52,8 @@
"@babel/preset-react": "7.0.0",
"@types/classnames": "2.2.6",
"@types/d3-array": "1.2.4",
- "@types/d3-hierarchy": "1.1.4",
"@types/d3-scale": "2.0.2",
"@types/d3-selection": "1.3.2",
- "@types/d3-shape": "1.2.4",
"@types/d3-zoom": "1.7.2",
"@types/dompurify": "0.0.32",
"@types/enzyme": "3.10.1",
@@ -75,7 +67,6 @@
"@types/react-intl": "2.3.17",
"@types/react-redux": "6.0.6",
"@types/react-router": "3.0.20",
- "@types/react-select": "1.2.6",
"@types/react-virtualized": "9.21.0",
"@types/sanitize-html": "1.20.0",
"@types/valid-url": "1.0.2",
diff --git a/server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts b/server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts
index 2a74c8b9870..991d3375ce3 100644
--- a/server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts
+++ b/server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts
@@ -62,6 +62,8 @@ import ActionsDropdown, {
} from 'sonar-ui-common/components/controls/ActionsDropdown';
import RadioToggle from 'sonar-ui-common/components/controls/RadioToggle';
import ReloadButton from 'sonar-ui-common/components/controls/ReloadButton';
+import Select from 'sonar-ui-common/components/controls/Select';
+import SearchSelect from 'sonar-ui-common/components/controls/SearchSelect';
import throwGlobalError from '../../utils/throwGlobalError';
import addGlobalSuccessMessage from '../../utils/addGlobalSuccessMessage';
import Suggestions from '../embed-docs-modal/Suggestions';
@@ -86,11 +88,9 @@ import DateTimeFormatter from '../../../components/intl/DateTimeFormatter';
import Favorite from '../../../components/controls/Favorite';
import HomePageSelect from '../../../components/controls/HomePageSelect';
import BranchIcon from '../../../components/icons-components/BranchIcon';
-import Select from '../../../components/controls/Select';
import SelectList from '../../../components/SelectList/SelectList';
import CoverageRating from '../../../components/ui/CoverageRating';
import NotFound from '../../../app/components/NotFound';
-import SearchSelect from '../../../components/controls/SearchSelect';
import A11ySkipTarget from '../a11y/A11ySkipTarget';
const exposeLibraries = () => {
diff --git a/server/sonar-web/src/main/js/apps/about/sonarcloud/Contact.tsx b/server/sonar-web/src/main/js/apps/about/sonarcloud/Contact.tsx
index 515391ad595..fe6d1c20b3d 100644
--- a/server/sonar-web/src/main/js/apps/about/sonarcloud/Contact.tsx
+++ b/server/sonar-web/src/main/js/apps/about/sonarcloud/Contact.tsx
@@ -22,8 +22,8 @@ import { Helmet } from 'react-helmet';
import { Link } from 'react-router';
import { Location } from 'history';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import Select from 'sonar-ui-common/components/controls/Select';
import SQPageContainer from './components/SQPageContainer';
-import Select from '../../../components/controls/Select';
import { isLoggedIn } from '../../../helpers/users';
import './style.css';
diff --git a/server/sonar-web/src/main/js/apps/account/notifications/Projects.tsx b/server/sonar-web/src/main/js/apps/account/notifications/Projects.tsx
index b774d40881b..12b074b97d5 100644
--- a/server/sonar-web/src/main/js/apps/account/notifications/Projects.tsx
+++ b/server/sonar-web/src/main/js/apps/account/notifications/Projects.tsx
@@ -20,10 +20,10 @@
import * as React from 'react';
import { differenceWith } from 'lodash';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import { AsyncSelect } from 'sonar-ui-common/components/controls/Select';
import ProjectNotifications from './ProjectNotifications';
import { NotificationProject } from './types';
import { getSuggestions } from '../../../api/components';
-import { AsyncSelect } from '../../../components/controls/Select';
import Organization from '../../../components/shared/Organization';
export interface Props {
diff --git a/server/sonar-web/src/main/js/apps/account/profile/UserDeleteAccountModal.tsx b/server/sonar-web/src/main/js/apps/account/profile/UserDeleteAccountModal.tsx
index 566fad469f6..72b4f5ca25c 100644
--- a/server/sonar-web/src/main/js/apps/account/profile/UserDeleteAccountModal.tsx
+++ b/server/sonar-web/src/main/js/apps/account/profile/UserDeleteAccountModal.tsx
@@ -18,14 +18,13 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { FormikProps } from 'formik';
import { connect } from 'react-redux';
import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
import InputValidationField from 'sonar-ui-common/components/controls/InputValidationField';
+import ValidationModal from 'sonar-ui-common/components/controls/ValidationModal';
import UserDeleteAccountContent from './UserDeleteAccountContent';
import RecentHistory from '../../../app/components/RecentHistory';
-import ValidationModal from '../../../components/controls/ValidationModal';
import { deactivateUser } from '../../../api/users';
import { Router, withRouter } from '../../../components/hoc/withRouter';
import { doLogout } from '../../../store/rootActions';
@@ -94,15 +93,7 @@ export class UserDeleteAccountModal extends React.PureComponent<DeleteModalProps
onClose={toggleModal}
onSubmit={this.handleSubmit}
validate={this.handleValidate}>
- {({
- dirty,
- errors,
- handleBlur,
- handleChange,
- isSubmitting,
- touched,
- values
- }: FormikProps<Values>) => (
+ {({ dirty, errors, handleBlur, handleChange, isSubmitting, touched, values }) => (
<>
<Alert className="big-spacer-bottom" variant="error">
{translate('my_profile.warning_message')}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/StatusFilter.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/StatusFilter.tsx
index 83cd481c5a6..5d06d9a244d 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/StatusFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/StatusFilter.tsx
@@ -19,8 +19,8 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { STATUSES } from '../constants';
-import Select from '../../../components/controls/Select';
interface Props {
value?: string;
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/TypesFilter.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/TypesFilter.tsx
index 3059784a750..ea6ee48e5e9 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/TypesFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/TypesFilter.tsx
@@ -19,8 +19,8 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { ALL_TYPES } from '../constants';
-import Select from '../../../components/controls/Select';
interface Props {
value: string;
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx
index 2f32217bc5d..5059f31b416 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/WorkersForm.tsx
@@ -22,8 +22,8 @@ import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import Select from 'sonar-ui-common/components/controls/Select';
import { setWorkerCount } from '../../../api/ce';
-import Select from '../../../components/controls/Select';
const MAX_WORKERS = 10;
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx
index 1adfff4951f..d5a4c8bfc04 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx
@@ -22,7 +22,7 @@ import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import SeverityHelper from '../../../components/shared/SeverityHelper';
import { activateRule, Profile } from '../../../api/quality-profiles';
import { SEVERITIES } from '../../../helpers/constants';
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx
index 6f6e053128d..4785706906f 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/BulkChangeModal.tsx
@@ -23,8 +23,8 @@ import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/contro
import Modal from 'sonar-ui-common/components/controls/Modal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
import { formatMeasure } from 'sonar-ui-common/helpers/measures';
+import Select from 'sonar-ui-common/components/controls/Select';
import { Query, serializeQuery } from '../query';
-import Select from '../../../components/controls/Select';
import { Profile, bulkActivateRules, bulkDeactivateRules } from '../../../api/quality-profiles';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
index 0adff48cbf5..5a0afefe1f7 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/CustomRuleFormModal.tsx
@@ -24,8 +24,8 @@ import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import Select from 'sonar-ui-common/components/controls/Select';
import MarkdownTips from '../../../components/common/MarkdownTips';
-import Select from '../../../components/controls/Select';
import SeverityHelper from '../../../components/shared/SeverityHelper';
import TypeHelper from '../../../components/shared/TypeHelper';
import { createRule, updateRule } from '../../../api/rules';
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx
index d92151cb031..e95e4a75b48 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/MeasureViewSelect.tsx
@@ -22,7 +22,7 @@ import TreemapIcon from 'sonar-ui-common/components/icons/TreemapIcon';
import ListIcon from 'sonar-ui-common/components/icons/ListIcon';
import TreeIcon from 'sonar-ui-common/components/icons/TreeIcon';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { hasList, hasTree, hasTreemap, View } from '../utils';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/create/components/OrganizationAvatarInput.tsx b/server/sonar-web/src/main/js/apps/create/components/OrganizationAvatarInput.tsx
index 637107f38ba..ec1da554e80 100644
--- a/server/sonar-web/src/main/js/apps/create/components/OrganizationAvatarInput.tsx
+++ b/server/sonar-web/src/main/js/apps/create/components/OrganizationAvatarInput.tsx
@@ -21,7 +21,7 @@ import * as React from 'react';
import * as classNames from 'classnames';
import { isWebUri } from 'valid-url';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import ValidationInput from '../../../components/controls/ValidationInput';
+import ValidationInput from 'sonar-ui-common/components/controls/ValidationInput';
import OrganizationAvatar from '../../../components/common/OrganizationAvatar';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/create/components/OrganizationKeyInput.tsx b/server/sonar-web/src/main/js/apps/create/components/OrganizationKeyInput.tsx
index 6a1cab029fd..f8d4d04ab5d 100644
--- a/server/sonar-web/src/main/js/apps/create/components/OrganizationKeyInput.tsx
+++ b/server/sonar-web/src/main/js/apps/create/components/OrganizationKeyInput.tsx
@@ -20,10 +20,10 @@
import * as React from 'react';
import * as classNames from 'classnames';
import { debounce } from 'lodash';
+import ValidationInput from 'sonar-ui-common/components/controls/ValidationInput';
import { translate } from 'sonar-ui-common/helpers/l10n';
import { getHostUrl } from 'sonar-ui-common/helpers/urls';
import { getOrganization } from '../../../api/organizations';
-import ValidationInput from '../../../components/controls/ValidationInput';
interface Props {
initialValue?: string;
diff --git a/server/sonar-web/src/main/js/apps/create/components/OrganizationSelect.tsx b/server/sonar-web/src/main/js/apps/create/components/OrganizationSelect.tsx
index 74f713c1cd7..eb17508806e 100644
--- a/server/sonar-web/src/main/js/apps/create/components/OrganizationSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/create/components/OrganizationSelect.tsx
@@ -21,7 +21,7 @@ import * as React from 'react';
import { sortBy } from 'lodash';
import { translate } from 'sonar-ui-common/helpers/l10n';
import { getBaseUrl } from 'sonar-ui-common/helpers/urls';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { sanitizeAlmId } from '../../../helpers/almIntegrations';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/create/components/OrganizationUrlInput.tsx b/server/sonar-web/src/main/js/apps/create/components/OrganizationUrlInput.tsx
index 46ec3718406..e9c2685bc74 100644
--- a/server/sonar-web/src/main/js/apps/create/components/OrganizationUrlInput.tsx
+++ b/server/sonar-web/src/main/js/apps/create/components/OrganizationUrlInput.tsx
@@ -21,7 +21,7 @@ import * as React from 'react';
import * as classNames from 'classnames';
import { isWebUri } from 'valid-url';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import ValidationInput from '../../../components/controls/ValidationInput';
+import ValidationInput from 'sonar-ui-common/components/controls/ValidationInput';
interface Props {
initialValue?: string;
diff --git a/server/sonar-web/src/main/js/apps/create/components/ProjectKeyInput.tsx b/server/sonar-web/src/main/js/apps/create/components/ProjectKeyInput.tsx
index a07ff276722..e35fa1ce458 100644
--- a/server/sonar-web/src/main/js/apps/create/components/ProjectKeyInput.tsx
+++ b/server/sonar-web/src/main/js/apps/create/components/ProjectKeyInput.tsx
@@ -20,8 +20,8 @@
import * as React from 'react';
import * as classNames from 'classnames';
import { debounce } from 'lodash';
+import ValidationInput from 'sonar-ui-common/components/controls/ValidationInput';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import ValidationInput from '../../../components/controls/ValidationInput';
import { doesComponentExists } from '../../../api/components';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/create/organization/RemoteOrganizationChoose.tsx b/server/sonar-web/src/main/js/apps/create/organization/RemoteOrganizationChoose.tsx
index 4513383ce55..fb2f4aed80d 100644
--- a/server/sonar-web/src/main/js/apps/create/organization/RemoteOrganizationChoose.tsx
+++ b/server/sonar-web/src/main/js/apps/create/organization/RemoteOrganizationChoose.tsx
@@ -28,9 +28,9 @@ import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n
import { getBaseUrl } from 'sonar-ui-common/helpers/urls';
import { SubmitButton } from 'sonar-ui-common/components/controls/buttons';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import Select from 'sonar-ui-common/components/controls/Select';
import { serializeQuery, ORGANIZATION_IMPORT_BINDING_IN_PROGRESS_TIMESTAMP } from './utils';
import OrganizationAvatar from '../../../components/common/OrganizationAvatar';
-import Select from '../../../components/controls/Select';
import { sanitizeAlmId } from '../../../helpers/almIntegrations';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/custom-measures/components/Form.tsx b/server/sonar-web/src/main/js/apps/custom-measures/components/Form.tsx
index 60af16fa436..f6baaf7697d 100644
--- a/server/sonar-web/src/main/js/apps/custom-measures/components/Form.tsx
+++ b/server/sonar-web/src/main/js/apps/custom-measures/components/Form.tsx
@@ -23,7 +23,7 @@ import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/contro
import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner';
import SimpleModal from 'sonar-ui-common/components/controls/SimpleModal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { getAllMetrics } from '../../../api/metrics';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/custom-metrics/components/Form.tsx b/server/sonar-web/src/main/js/apps/custom-metrics/components/Form.tsx
index 2458ecbc8b0..9a0632a929b 100644
--- a/server/sonar-web/src/main/js/apps/custom-metrics/components/Form.tsx
+++ b/server/sonar-web/src/main/js/apps/custom-metrics/components/Form.tsx
@@ -22,7 +22,7 @@ import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner';
import SimpleModal from 'sonar-ui-common/components/controls/SimpleModal';
-import Select, { Creatable } from '../../../components/controls/Select';
+import Select, { Creatable } from 'sonar-ui-common/components/controls/Select';
export interface MetricProps {
description: string;
diff --git a/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx b/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx
index 7a8fb72a717..ae679fb59f5 100644
--- a/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx
@@ -28,11 +28,11 @@ import { Alert } from 'sonar-ui-common/components/ui/Alert';
import Checkbox from 'sonar-ui-common/components/controls/Checkbox';
import HelpTooltip from 'sonar-ui-common/components/controls/HelpTooltip';
import Radio from 'sonar-ui-common/components/controls/Radio';
+import Select from 'sonar-ui-common/components/controls/Select';
+import SearchSelect from 'sonar-ui-common/components/controls/SearchSelect';
import { searchAssignees } from '../utils';
import Avatar from '../../../components/ui/Avatar';
import MarkdownTips from '../../../components/common/MarkdownTips';
-import SearchSelect from '../../../components/controls/SearchSelect';
-import Select from '../../../components/controls/Select';
import SeverityHelper from '../../../components/shared/SeverityHelper';
import throwGlobalError from '../../../app/utils/throwGlobalError';
import { searchIssueTags, bulkChangeIssues } from '../../../api/issues';
diff --git a/server/sonar-web/src/main/js/apps/overview/badges/BadgeParams.tsx b/server/sonar-web/src/main/js/apps/overview/badges/BadgeParams.tsx
index 6bc63b9205c..56ae174319e 100644
--- a/server/sonar-web/src/main/js/apps/overview/badges/BadgeParams.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/badges/BadgeParams.tsx
@@ -20,8 +20,8 @@
import * as React from 'react';
import * as classNames from 'classnames';
import { getLocalizedMetricName, translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { BadgeColors, BadgeType, BadgeOptions, BadgeFormats } from './utils';
-import Select from '../../../components/controls/Select';
import { fetchWebApi } from '../../../api/web-api';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/overview/components/App.tsx b/server/sonar-web/src/main/js/apps/overview/components/App.tsx
index 99869f3ffb7..3c2d06963a1 100644
--- a/server/sonar-web/src/main/js/apps/overview/components/App.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/components/App.tsx
@@ -22,7 +22,6 @@ import { Helmet } from 'react-helmet';
import { getBaseUrl, getPathUrlAsString } from 'sonar-ui-common/helpers/urls';
import { lazyLoad } from 'sonar-ui-common/components/lazyLoad';
import OverviewApp from './OverviewApp';
-import ReviewApp from '../pullRequests/ReviewApp';
import Suggestions from '../../../app/components/embed-docs-modal/Suggestions';
import { withRouter, Router } from '../../../components/hoc/withRouter';
import { getProjectUrl } from '../../../helpers/urls';
@@ -30,6 +29,7 @@ import { isSonarCloud } from '../../../helpers/system';
import { isShortLivingBranch, isPullRequest } from '../../../helpers/branches';
const EmptyOverview = lazyLoad(() => import('./EmptyOverview'));
+const ReviewApp = lazyLoad(() => import('../pullRequests/ReviewApp'));
interface Props {
branchLike?: T.BranchLike;
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaContainer.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaContainer.tsx
index 29aa6841570..92d10a2a038 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaContainer.tsx
@@ -19,6 +19,7 @@
*/
import * as React from 'react';
import { connect } from 'react-redux';
+import { lazyLoad } from 'sonar-ui-common/components/lazyLoad';
import { translate } from 'sonar-ui-common/helpers/l10n';
import MetaKey from './MetaKey';
import MetaOrganizationKey from './MetaOrganizationKey';
@@ -27,7 +28,6 @@ import MetaQualityGate from './MetaQualityGate';
import MetaQualityProfiles from './MetaQualityProfiles';
import MetaSize from './MetaSize';
import MetaTags from './MetaTags';
-import BadgesModal from '../badges/BadgesModal';
import AnalysesList from '../events/AnalysesList';
import { hasPrivateAccess } from '../../../helpers/organizations';
import {
@@ -39,6 +39,8 @@ import {
} from '../../../store/rootReducer';
import PrivacyBadgeContainer from '../../../components/common/PrivacyBadgeContainer';
+const BadgesModal = lazyLoad(() => import('../badges/BadgesModal'), 'BadgesModal');
+
interface StateToProps {
appState: T.AppState;
currentUser: T.CurrentUser;
diff --git a/server/sonar-web/src/main/js/apps/permissions/project/components/ApplyTemplate.tsx b/server/sonar-web/src/main/js/apps/permissions/project/components/ApplyTemplate.tsx
index 52ec4548ec5..fbbe9af3150 100644
--- a/server/sonar-web/src/main/js/apps/permissions/project/components/ApplyTemplate.tsx
+++ b/server/sonar-web/src/main/js/apps/permissions/project/components/ApplyTemplate.tsx
@@ -23,7 +23,7 @@ import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/contro
import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner';
import SimpleModal from 'sonar-ui-common/components/controls/SimpleModal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
-import Select from '../../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { getPermissionTemplates, applyTemplateToProject } from '../../../../api/permissions';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityGraphsHeader.tsx b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityGraphsHeader.tsx
index 24160d2d57f..97d42dd7ded 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityGraphsHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityGraphsHeader.tsx
@@ -19,9 +19,9 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import AddGraphMetric from './forms/AddGraphMetric';
import { isCustomGraph, GRAPH_TYPES } from '../utils';
-import Select from '../../../components/controls/Select';
interface Props {
addCustomMetric: (metric: string) => void;
diff --git a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.tsx b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.tsx
index d056dfe327b..f5a5f4d0b13 100644
--- a/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/projectActivity/components/ProjectActivityPageHeader.tsx
@@ -20,11 +20,11 @@
import * as React from 'react';
import * as classNames from 'classnames';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import ProjectActivityEventSelectOption from './ProjectActivityEventSelectOption';
import ProjectActivityEventSelectValue from './ProjectActivityEventSelectValue';
import ProjectActivityDateInput from './ProjectActivityDateInput';
import { EVENT_TYPES, APPLICATION_EVENT_TYPES, Query } from '../utils';
-import Select from '../../../components/controls/Select';
interface Props {
category?: string;
diff --git a/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx b/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx
index 70f312a1524..d47df6d134e 100644
--- a/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx
+++ b/server/sonar-web/src/main/js/apps/projectQualityGate/Form.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import Select from '../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
interface Props {
allGates: T.QualityGate[];
diff --git a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
index 90a477ae3a5..e4ed9fe34ab 100644
--- a/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
+++ b/server/sonar-web/src/main/js/apps/projectQualityProfiles/ProfileRow.tsx
@@ -19,8 +19,8 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { Profile } from '../../api/quality-profiles';
-import Select from '../../components/controls/Select';
interface Props {
onChangeProfile: (oldProfile: string, newProfile: string) => Promise<void>;
diff --git a/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx b/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx
index a841f8e0bbd..dd8e17564de 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/PerspectiveSelect.tsx
@@ -19,8 +19,8 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import PerspectiveSelectOption, { Option } from './PerspectiveSelectOption';
-import Select from '../../../components/controls/Select';
import { VIEWS, VISUALIZATIONS } from '../utils';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx b/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx
index aa3e51e4f0a..32563195b02 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/ProjectsSortingSelect.tsx
@@ -24,9 +24,9 @@ import SortAscIcon from 'sonar-ui-common/components/icons/SortAscIcon';
import { translate } from 'sonar-ui-common/helpers/l10n';
import Tooltip from 'sonar-ui-common/components/controls/Tooltip';
import { ButtonIcon } from 'sonar-ui-common/components/controls/buttons';
+import Select from 'sonar-ui-common/components/controls/Select';
import ProjectsSortingSelectOption, { Option } from './ProjectsSortingSelectOption';
import { colors } from '../../../app/theme';
-import Select from '../../../components/controls/Select';
import { SORTING_METRICS, SORTING_LEAK_METRICS, parseSorting } from '../utils';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx b/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx
index bde972706e9..1e7cdf74af4 100644
--- a/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/filters/SearchableFilterFooter.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
interface Props {
isFavorite?: boolean;
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx
index 346cfd598f7..2c10f12852a 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/BulkApplyTemplateModal.tsx
@@ -23,8 +23,8 @@ import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n
import { ResetButtonLink, SubmitButton } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import Select from 'sonar-ui-common/components/controls/Select';
import { getPermissionTemplates, bulkApplyTemplate } from '../../api/permissions';
-import Select from '../../components/controls/Select';
export interface Props {
analyzedBefore: Date | undefined;
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
index fe4d6c7c373..81835b45b74 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
@@ -25,10 +25,10 @@ import { Button } from 'sonar-ui-common/components/controls/buttons';
import Checkbox from 'sonar-ui-common/components/controls/Checkbox';
import HelpTooltip from 'sonar-ui-common/components/controls/HelpTooltip';
import SearchBox from 'sonar-ui-common/components/controls/SearchBox';
+import Select from 'sonar-ui-common/components/controls/Select';
import BulkApplyTemplateModal from './BulkApplyTemplateModal';
import DeleteModal from './DeleteModal';
import DateInput from '../../components/controls/DateInput';
-import Select from '../../components/controls/Select';
import { Project } from '../../api/components';
export interface Props {
diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/ConditionOperator.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/ConditionOperator.tsx
index c0ae3db5bed..5be41be1de7 100644
--- a/server/sonar-web/src/main/js/apps/quality-gates/components/ConditionOperator.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-gates/components/ConditionOperator.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { getPossibleOperators } from '../utils';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/MetricSelect.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/MetricSelect.tsx
index 348a4bbc098..e1069d8c516 100644
--- a/server/sonar-web/src/main/js/apps/quality-gates/components/MetricSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-gates/components/MetricSelect.tsx
@@ -24,7 +24,7 @@ import {
getLocalizedMetricName,
getLocalizedMetricDomain
} from 'sonar-ui-common/helpers/l10n';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
interface Props {
metrics: T.Metric[];
diff --git a/server/sonar-web/src/main/js/apps/quality-gates/components/ThresholdInput.tsx b/server/sonar-web/src/main/js/apps/quality-gates/components/ThresholdInput.tsx
index 968250fc03a..42d13789a1e 100644
--- a/server/sonar-web/src/main/js/apps/quality-gates/components/ThresholdInput.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-gates/components/ThresholdInput.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
interface Props {
name: string;
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
index 96fdf73db3b..fde6c0583ad 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonForm.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { translate } from 'sonar-ui-common/helpers/l10n';
-import Select from '../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { Profile } from '../types';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx
index 30c2837000d..d50bba64ee8 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ChangeParentForm.tsx
@@ -22,9 +22,9 @@ import { sortBy } from 'lodash';
import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
+import Select from 'sonar-ui-common/components/controls/Select';
import { Profile } from '../types';
import { changeProfileParent } from '../../../api/quality-profiles';
-import Select from '../../../components/controls/Select';
interface Props {
onChange: () => void;
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx
index 7d3ef0b6a1d..f663611028a 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfilePermissionsFormSelect.tsx
@@ -21,8 +21,8 @@ import * as React from 'react';
import GroupIcon from 'sonar-ui-common/components/icons/GroupIcon';
import { debounce, identity } from 'lodash';
import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { Group } from './ProfilePermissions';
-import Select from '../../../components/controls/Select';
import Avatar from '../../../components/ui/Avatar';
type Option = T.UserSelected | Group;
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx
index 1cc35ee27fe..89fb516f665 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/CreateProfileForm.tsx
@@ -22,12 +22,12 @@ import { sortBy } from 'lodash';
import { translate } from 'sonar-ui-common/helpers/l10n';
import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
import Modal from 'sonar-ui-common/components/controls/Modal';
+import Select from 'sonar-ui-common/components/controls/Select';
import {
changeProfileParent,
createQualityProfile,
getImporters
} from '../../../api/quality-profiles';
-import Select from '../../../components/controls/Select';
import { Profile } from '../types';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx
index 7c94219266e..b9a2f6b18fc 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListHeader.tsx
@@ -18,10 +18,9 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { Option } from 'react-select';
import { translate } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import { getProfilesPath, getProfilesForLanguagePath } from '../utils';
-import Select from '../../../components/controls/Select';
import { withRouter, Router } from '../../../components/hoc/withRouter';
interface Props {
@@ -48,7 +47,7 @@ export class ProfilesListHeader extends React.PureComponent<Props> {
return null;
}
- const options: Option[] = languages.map(language => ({
+ const options = languages.map(language => ({
label: language.name,
value: language.key
}));
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.tsx b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.tsx
index 590e9af8d0d..39cb7885333 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.tsx
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForSingleSelectList.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import Select from '../../../../components/controls/Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import { DefaultSpecializedInputProps } from '../../utils';
type Props = DefaultSpecializedInputProps & Pick<T.SettingCategoryDefinition, 'options'>;
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
index 8adfdaa2e0d..8deb0fe862e 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/HealthCard.tsx
@@ -21,9 +21,9 @@ import * as React from 'react';
import { map } from 'lodash';
import { translate } from 'sonar-ui-common/helpers/l10n';
import { Alert } from 'sonar-ui-common/components/ui/Alert';
+import BoxedGroupAccordion from 'sonar-ui-common/components/controls/BoxedGroupAccordion';
import HealthItem from './HealthItem';
import Section from './Section';
-import BoxedGroupAccordion from '../../../../components/controls/BoxedGroupAccordion';
import { LOGS_LEVELS, groupSections, getLogsLevel } from '../../utils';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
index 60cf8af8227..0f3a3778785 100644
--- a/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
+++ b/server/sonar-web/src/main/js/apps/users/components/UsersSelectSearch.tsx
@@ -20,8 +20,8 @@
import * as React from 'react';
import { debounce } from 'lodash';
import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n';
+import Select from 'sonar-ui-common/components/controls/Select';
import Avatar from '../../../components/ui/Avatar';
-import Select from '../../../components/controls/Select';
interface Option {
login: string;
diff --git a/server/sonar-web/src/main/js/apps/webhooks/components/CreateWebhookForm.tsx b/server/sonar-web/src/main/js/apps/webhooks/components/CreateWebhookForm.tsx
index 6fe6ba8bc42..cf9162e19db 100644
--- a/server/sonar-web/src/main/js/apps/webhooks/components/CreateWebhookForm.tsx
+++ b/server/sonar-web/src/main/js/apps/webhooks/components/CreateWebhookForm.tsx
@@ -18,15 +18,14 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { FormikProps } from 'formik';
import { isWebUri } from 'valid-url';
import { translate } from 'sonar-ui-common/helpers/l10n';
import InputValidationField from 'sonar-ui-common/components/controls/InputValidationField';
-import ValidationModal from '../../../components/controls/ValidationModal';
+import ValidationModal from 'sonar-ui-common/components/controls/ValidationModal';
interface Props {
onClose: () => void;
- onDone: (data: { name: string; url: string }) => Promise<void>;
+ onDone: (data: Values) => Promise<void>;
webhook?: T.Webhook;
}
@@ -72,24 +71,16 @@ export default class CreateWebhookForm extends React.PureComponent<Props> {
confirmButtonText={confirmButtonText}
header={modalHeader}
initialValues={{
- name: webhook ? webhook.name : '',
- secret: webhook ? webhook.secret : '',
- url: webhook ? webhook.url : ''
+ name: (webhook && webhook.name) || '',
+ secret: (webhook && webhook.secret) || '',
+ url: (webhook && webhook.url) || ''
}}
isInitialValid={isUpdate}
onClose={this.props.onClose}
onSubmit={this.props.onDone}
size="small"
validate={this.handleValidate}>
- {({
- dirty,
- errors,
- handleBlur,
- handleChange,
- isSubmitting,
- touched,
- values
- }: FormikProps<Values>) => (
+ {({ dirty, errors, handleBlur, handleChange, isSubmitting, touched, values }) => (
<>
<InputValidationField
autoFocus={true}
diff --git a/server/sonar-web/src/main/js/apps/webhooks/components/DeliveryAccordion.tsx b/server/sonar-web/src/main/js/apps/webhooks/components/DeliveryAccordion.tsx
index de01ee7fed1..02a436d216d 100644
--- a/server/sonar-web/src/main/js/apps/webhooks/components/DeliveryAccordion.tsx
+++ b/server/sonar-web/src/main/js/apps/webhooks/components/DeliveryAccordion.tsx
@@ -20,9 +20,9 @@
import * as React from 'react';
import AlertErrorIcon from 'sonar-ui-common/components/icons/AlertErrorIcon';
import AlertSuccessIcon from 'sonar-ui-common/components/icons/AlertSuccessIcon';
+import BoxedGroupAccordion from 'sonar-ui-common/components/controls/BoxedGroupAccordion';
import DeliveryItem from './DeliveryItem';
import DateTimeFormatter from '../../../components/intl/DateTimeFormatter';
-import BoxedGroupAccordion from '../../../components/controls/BoxedGroupAccordion';
import { getDelivery } from '../../../api/webhooks';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/webhooks/components/__tests__/__snapshots__/CreateWebhookForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/webhooks/components/__tests__/__snapshots__/CreateWebhookForm-test.tsx.snap
index 43555c1b7ec..9da8819486c 100644
--- a/server/sonar-web/src/main/js/apps/webhooks/components/__tests__/__snapshots__/CreateWebhookForm-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/webhooks/components/__tests__/__snapshots__/CreateWebhookForm-test.tsx.snap
@@ -49,7 +49,7 @@ exports[`should render correctly when updating a webhook without secret 1`] = `
initialValues={
Object {
"name": "foo",
- "secret": undefined,
+ "secret": "",
"url": "http://foo.bar",
}
}
diff --git a/server/sonar-web/src/main/js/components/controls/BoxedGroupAccordion.tsx b/server/sonar-web/src/main/js/components/controls/BoxedGroupAccordion.tsx
deleted file mode 100644
index 8e1a4cd99ad..00000000000
--- a/server/sonar-web/src/main/js/components/controls/BoxedGroupAccordion.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 OpenCloseIcon from 'sonar-ui-common/components/icons/OpenCloseIcon';
-
-interface Props {
- children: React.ReactNode;
- className?: string;
- data?: string;
- onClick: (data?: string) => void;
- open: boolean;
- renderHeader?: () => React.ReactNode;
- title: React.ReactNode;
-}
-
-interface State {
- hoveringInner: boolean;
-}
-
-export default class BoxedGroupAccordion extends React.PureComponent<Props, State> {
- state: State = { hoveringInner: false };
-
- handleClick = () => {
- this.props.onClick(this.props.data);
- };
-
- onDetailEnter = () => {
- this.setState({ hoveringInner: true });
- };
-
- onDetailLeave = () => {
- this.setState({ hoveringInner: false });
- };
-
- render() {
- const { className, open, renderHeader, title } = this.props;
- return (
- <div
- className={classNames('boxed-group boxed-group-accordion', className, {
- 'no-hover': this.state.hoveringInner
- })}>
- <div className="boxed-group-header" onClick={this.handleClick} role="listitem">
- <span className="boxed-group-accordion-title">
- <OpenCloseIcon className="little-spacer-right" open={open} />
- {title}
- </span>
- {renderHeader && renderHeader()}
- </div>
- {open && (
- <div
- className="boxed-group-inner"
- onMouseEnter={this.onDetailEnter}
- onMouseLeave={this.onDetailLeave}>
- {this.props.children}
- </div>
- )}
- </div>
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/components/controls/DateInput.tsx b/server/sonar-web/src/main/js/components/controls/DateInput.tsx
index dcb777c8573..da7918c9be3 100644
--- a/server/sonar-web/src/main/js/components/controls/DateInput.tsx
+++ b/server/sonar-web/src/main/js/components/controls/DateInput.tsx
@@ -37,7 +37,7 @@ import {
import { ButtonIcon, ClearButton } from 'sonar-ui-common/components/controls/buttons';
import OutsideClickHandler from 'sonar-ui-common/components/controls/OutsideClickHandler';
import { lazyLoad } from 'sonar-ui-common/components/lazyLoad';
-import Select from './Select';
+import Select from 'sonar-ui-common/components/controls/Select';
import './DayPicker.css';
import './styles.css';
diff --git a/server/sonar-web/src/main/js/components/controls/SearchSelect.tsx b/server/sonar-web/src/main/js/components/controls/SearchSelect.tsx
deleted file mode 100644
index c4b681624e6..00000000000
--- a/server/sonar-web/src/main/js/components/controls/SearchSelect.tsx
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { debounce } from 'lodash';
-import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n';
-import Select, { Creatable } from './Select';
-
-interface Props<T> {
- autofocus?: boolean;
- canCreate?: boolean;
- className?: string;
- clearable?: boolean;
- defaultOptions?: T[];
- minimumQueryLength?: number;
- multi?: boolean;
- onSearch: (query: string) => Promise<T[]>;
- onSelect?: (option: T) => void;
- onMultiSelect?: (options: T[]) => void;
- promptTextCreator?: (label: string) => string;
- renderOption?: (option: T) => JSX.Element;
- resetOnBlur?: boolean;
- value?: T | T[];
-}
-
-interface State<T> {
- loading: boolean;
- options: T[];
- query: string;
-}
-
-export default class SearchSelect<T extends { value: string }> extends React.PureComponent<
- Props<T>,
- State<T>
-> {
- mounted = false;
-
- constructor(props: Props<T>) {
- super(props);
- this.state = { loading: false, options: props.defaultOptions || [], query: '' };
- this.handleSearch = debounce(this.handleSearch, 250);
- }
-
- componentDidMount() {
- this.mounted = true;
- }
-
- componentWillUnmount() {
- this.mounted = false;
- }
-
- get autofocus() {
- return this.props.autofocus !== undefined ? this.props.autofocus : true;
- }
-
- get minimumQueryLength() {
- return this.props.minimumQueryLength !== undefined ? this.props.minimumQueryLength : 2;
- }
-
- get resetOnBlur() {
- return this.props.resetOnBlur !== undefined ? this.props.resetOnBlur : true;
- }
-
- handleSearch = (query: string) => {
- // Ignore the result if the query changed
- const currentQuery = query;
- this.props.onSearch(currentQuery).then(
- options => {
- if (this.mounted) {
- this.setState(state => ({
- loading: false,
- options: state.query === currentQuery ? options : state.options
- }));
- }
- },
- () => {
- if (this.mounted) {
- this.setState({ loading: false });
- }
- }
- );
- };
-
- handleChange = (option: T | T[]) => {
- if (Array.isArray(option)) {
- if (this.props.onMultiSelect) {
- this.props.onMultiSelect(option);
- }
- } else if (this.props.onSelect) {
- this.props.onSelect(option);
- }
- };
-
- handleInputChange = (query: string) => {
- if (query.length >= this.minimumQueryLength) {
- this.setState({ loading: true, query });
- this.handleSearch(query);
- } else {
- // `onInputChange` is called with an empty string after a user selects a value
- // in this case we shouldn't reset `options`, because it also resets select value :(
- const options = (query.length === 0 && this.props.defaultOptions) || [];
- this.setState({ options, query });
- }
- };
-
- // disable internal filtering
- handleFilterOption = () => true;
-
- render() {
- const Component = this.props.canCreate ? Creatable : Select;
- return (
- <Component
- autoFocus={this.autofocus}
- className={this.props.className}
- clearable={this.props.clearable}
- escapeClearsValue={false}
- filterOption={this.handleFilterOption}
- isLoading={this.state.loading}
- multi={this.props.multi}
- noResultsText={
- this.state.query.length < this.minimumQueryLength
- ? translateWithParameters('select2.tooShort', this.minimumQueryLength)
- : translate('select2.noMatches')
- }
- onBlurResetsInput={this.resetOnBlur}
- onChange={this.handleChange}
- onInputChange={this.handleInputChange}
- optionRenderer={this.props.renderOption}
- options={this.state.options}
- placeholder={translate('search_verb')}
- promptTextCreator={this.props.promptTextCreator}
- searchable={true}
- value={this.props.value}
- valueRenderer={this.props.renderOption}
- />
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/components/controls/Select.tsx b/server/sonar-web/src/main/js/components/controls/Select.tsx
deleted file mode 100644
index 2086716ac0f..00000000000
--- a/server/sonar-web/src/main/js/components/controls/Select.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { ReactSelectProps, ReactCreatableSelectProps, ReactAsyncSelectProps } from 'react-select';
-import { ClearButton } from 'sonar-ui-common/components/controls/buttons';
-import { lazyLoad } from 'sonar-ui-common/components/lazyLoad';
-import './react-select.css';
-
-const ReactSelectLib = import('react-select');
-const ReactSelect = lazyLoad(() => ReactSelectLib);
-const ReactCreatable = lazyLoad(() => ReactSelectLib.then(lib => ({ default: lib.Creatable })));
-const ReactAsync = lazyLoad(() => ReactSelectLib.then(lib => ({ default: lib.Async })));
-
-function renderInput() {
- return <ClearButton className="button-tiny spacer-left text-middle" iconProps={{ size: 12 }} />;
-}
-
-interface WithInnerRef {
- innerRef?: (element: React.Component) => void;
-}
-
-export default function Select({ innerRef, ...props }: WithInnerRef & ReactSelectProps) {
- // TODO try to define good defaults, if any
- // ReactSelect doesn't declare `clearRenderer` prop
- const ReactSelectAny = ReactSelect as any;
- // hide the "x" icon when select is empty
- const clearable = props.clearable ? Boolean(props.value) : false;
- return (
- <ReactSelectAny {...props} clearRenderer={renderInput} clearable={clearable} ref={innerRef} />
- );
-}
-
-export function Creatable(props: ReactCreatableSelectProps) {
- // ReactSelect doesn't declare `clearRenderer` prop
- const ReactCreatableAny = ReactCreatable as any;
- return <ReactCreatableAny {...props} clearRenderer={renderInput} />;
-}
-
-// TODO figure out why `ref` prop is incompatible
-export function AsyncSelect(props: ReactAsyncSelectProps & { ref?: any }) {
- return <ReactAsync {...props} />;
-}
diff --git a/server/sonar-web/src/main/js/components/controls/ValidationForm.tsx b/server/sonar-web/src/main/js/components/controls/ValidationForm.tsx
deleted file mode 100644
index 9f2ca8217ee..00000000000
--- a/server/sonar-web/src/main/js/components/controls/ValidationForm.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { FormikActions, FormikProps, Formik } from 'formik';
-
-export type ChildrenProps<V> = T.Omit<FormikProps<V>, 'handleSubmit'>;
-
-interface Props<V> {
- children: (props: ChildrenProps<V>) => React.ReactNode;
- initialValues: V;
- isInitialValid?: boolean;
- onSubmit: (data: V) => Promise<void>;
- validate: (data: V) => { [P in keyof V]?: string } | Promise<{ [P in keyof V]?: string }>;
-}
-
-export default class ValidationForm<V> extends React.Component<Props<V>> {
- mounted = false;
-
- componentDidMount() {
- this.mounted = true;
- }
-
- componentWillUnmount() {
- this.mounted = false;
- }
-
- handleSubmit = (data: V, { setSubmitting }: FormikActions<V>) => {
- const result = this.props.onSubmit(data);
- const stopSubmitting = () => {
- if (this.mounted) {
- setSubmitting(false);
- }
- };
-
- if (result) {
- result.then(stopSubmitting, stopSubmitting);
- } else {
- stopSubmitting();
- }
- };
-
- render() {
- return (
- <Formik<V>
- initialValues={this.props.initialValues}
- isInitialValid={this.props.isInitialValid}
- onSubmit={this.handleSubmit}
- validate={this.props.validate}>
- {({ handleSubmit, ...props }) => (
- <form onSubmit={handleSubmit}>{this.props.children(props)}</form>
- )}
- </Formik>
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/components/controls/ValidationInput.tsx b/server/sonar-web/src/main/js/components/controls/ValidationInput.tsx
deleted file mode 100644
index 3d7a78104a1..00000000000
--- a/server/sonar-web/src/main/js/components/controls/ValidationInput.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 AlertErrorIcon from 'sonar-ui-common/components/icons/AlertErrorIcon';
-import AlertSuccessIcon from 'sonar-ui-common/components/icons/AlertSuccessIcon';
-import HelpTooltip from 'sonar-ui-common/components/controls/HelpTooltip';
-
-interface Props {
- description?: string;
- children: React.ReactNode;
- className?: string;
- error: string | undefined;
- help?: string;
- id: string;
- isInvalid: boolean;
- isValid: boolean;
- label: React.ReactNode;
- required?: boolean;
-}
-
-export default function ValidationInput(props: Props) {
- const hasError = props.isInvalid && props.error !== undefined;
- return (
- <div className={props.className}>
- <label htmlFor={props.id}>
- <span className="text-middle">
- <strong>{props.label}</strong>
- {props.required && <em className="mandatory">*</em>}
- </span>
- {props.help && <HelpTooltip className="spacer-left" overlay={props.help} />}
- </label>
- <div className="little-spacer-top spacer-bottom">
- {props.children}
- {props.isInvalid && <AlertErrorIcon className="spacer-left text-middle" />}
- {hasError && (
- <span className="little-spacer-left text-danger text-middle">{props.error}</span>
- )}
- {props.isValid && <AlertSuccessIcon className="spacer-left text-middle" />}
- </div>
- {props.description && <div className="note abs-width-400">{props.description}</div>}
- </div>
- );
-}
diff --git a/server/sonar-web/src/main/js/components/controls/ValidationModal.tsx b/server/sonar-web/src/main/js/components/controls/ValidationModal.tsx
deleted file mode 100644
index 841b3592be1..00000000000
--- a/server/sonar-web/src/main/js/components/controls/ValidationModal.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { translate } from 'sonar-ui-common/helpers/l10n';
-import { SubmitButton, ResetButtonLink } from 'sonar-ui-common/components/controls/buttons';
-import DeferredSpinner from 'sonar-ui-common/components/ui/DeferredSpinner';
-import Modal, { ModalProps } from 'sonar-ui-common/components/controls/Modal';
-import ValidationForm, { ChildrenProps } from './ValidationForm';
-
-interface Props<V> extends ModalProps {
- children: (props: ChildrenProps<V>) => React.ReactNode;
- confirmButtonText: string;
- header: string;
- initialValues: V;
- isDestructive?: boolean;
- isInitialValid?: boolean;
- onClose: () => void;
- onSubmit: (data: V) => Promise<void>;
- validate: (data: V) => { [P in keyof V]?: string };
-}
-
-export default class ValidationModal<V> extends React.PureComponent<Props<V>> {
- handleSubmit = (data: V) => {
- return this.props.onSubmit(data).then(() => {
- this.props.onClose();
- });
- };
-
- render() {
- return (
- <Modal
- contentLabel={this.props.header}
- noBackdrop={this.props.noBackdrop}
- onRequestClose={this.props.onClose}
- size={this.props.size}>
- <ValidationForm
- initialValues={this.props.initialValues}
- isInitialValid={this.props.isInitialValid}
- onSubmit={this.handleSubmit}
- validate={this.props.validate}>
- {props => (
- <>
- <header className="modal-head">
- <h2>{this.props.header}</h2>
- </header>
-
- <div className="modal-body">{this.props.children(props)}</div>
-
- <footer className="modal-foot">
- <DeferredSpinner className="spacer-right" loading={props.isSubmitting} />
- <SubmitButton
- className={this.props.isDestructive ? 'button-red' : undefined}
- disabled={props.isSubmitting || !props.isValid || !props.dirty}>
- {this.props.confirmButtonText}
- </SubmitButton>
- <ResetButtonLink disabled={props.isSubmitting} onClick={this.props.onClose}>
- {translate('cancel')}
- </ResetButtonLink>
- </footer>
- </>
- )}
- </ValidationForm>
- </Modal>
- );
- }
-}
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/BoxedGroupAccordion-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/BoxedGroupAccordion-test.tsx
deleted file mode 100644
index b77c4c5bbcd..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/BoxedGroupAccordion-test.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { shallow } from 'enzyme';
-import { click } from 'sonar-ui-common/helpers/testUtils';
-import BoxedGroupAccordion from '../BoxedGroupAccordion';
-
-it('should render correctly', () => {
- expect(getWrapper()).toMatchSnapshot();
-});
-
-it('should show the inner content after a click', () => {
- const onClick = jest.fn();
- const wrapper = getWrapper({ onClick });
- click(wrapper.find('.boxed-group-header'));
-
- expect(onClick).lastCalledWith('foo');
- wrapper.setProps({ open: true });
-
- expect(wrapper.find('.boxed-group-inner').exists()).toBeTruthy();
-});
-
-function getWrapper(props = {}) {
- return shallow(
- <BoxedGroupAccordion
- data="foo"
- onClick={() => {}}
- open={false}
- renderHeader={() => <div>header content</div>}
- title="Foo"
- {...props}>
- <div>inner content</div>
- </BoxedGroupAccordion>
- );
-}
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/SearchSelect-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/SearchSelect-test.tsx
deleted file mode 100644
index 340e30c16f2..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/SearchSelect-test.tsx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { shallow } from 'enzyme';
-import SearchSelect from '../SearchSelect';
-
-jest.mock('lodash', () => {
- const lodash = require.requireActual('lodash');
- lodash.debounce = jest.fn(fn => fn);
- return lodash;
-});
-
-it('should render Select', () => {
- expect(shallow(<SearchSelect onSearch={jest.fn()} onSelect={jest.fn()} />)).toMatchSnapshot();
-});
-
-it('should call onSelect', () => {
- const onSelect = jest.fn();
- const wrapper = shallow(<SearchSelect onSearch={jest.fn()} onSelect={onSelect} />);
- wrapper.prop('onChange')({ value: 'foo' });
- expect(onSelect).lastCalledWith({ value: 'foo' });
-});
-
-it('should call onSearch', () => {
- const onSearch = jest.fn().mockReturnValue(Promise.resolve([]));
- const wrapper = shallow(
- <SearchSelect minimumQueryLength={2} onSearch={onSearch} onSelect={jest.fn()} />
- );
- wrapper.prop('onInputChange')('f');
- expect(onSearch).not.toHaveBeenCalled();
- wrapper.prop('onInputChange')('foo');
- expect(onSearch).lastCalledWith('foo');
-});
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationForm-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/ValidationForm-test.tsx
deleted file mode 100644
index 3760b02ca81..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationForm-test.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { shallow } from 'enzyme';
-import ValidationForm from '../ValidationForm';
-
-it('should render and submit', async () => {
- const render = jest.fn();
- const onSubmit = jest.fn();
- const setSubmitting = jest.fn();
- const wrapper = shallow(
- <ValidationForm initialValues={{ foo: 'bar' }} onSubmit={onSubmit} validate={jest.fn()}>
- {render}
- </ValidationForm>
- );
- expect(wrapper).toMatchSnapshot();
- wrapper.dive();
- expect(render).toBeCalledWith(
- expect.objectContaining({ dirty: false, errors: {}, values: { foo: 'bar' } })
- );
-
- wrapper.prop<Function>('onSubmit')({ foo: 'bar' }, { setSubmitting });
- expect(setSubmitting).toBeCalledWith(false);
-
- onSubmit.mockResolvedValue(undefined).mockClear();
- setSubmitting.mockClear();
- wrapper.prop<Function>('onSubmit')({ foo: 'bar' }, { setSubmitting });
- await new Promise(setImmediate);
- expect(setSubmitting).toBeCalledWith(false);
-});
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationInput-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/ValidationInput-test.tsx
deleted file mode 100644
index 280d52bec6c..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationInput-test.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { shallow } from 'enzyme';
-import ValidationInput from '../ValidationInput';
-
-it('should render', () => {
- expect(
- shallow(
- <ValidationInput
- description="My description"
- error={undefined}
- help="Help message"
- id="field-id"
- isInvalid={false}
- isValid={false}
- label="Field label"
- required={true}>
- <div />
- </ValidationInput>
- )
- ).toMatchSnapshot();
-});
-
-it('should render with error', () => {
- expect(
- shallow(
- <ValidationInput
- description="My description"
- error="Field error message"
- id="field-id"
- isInvalid={true}
- isValid={false}
- label="Field label">
- <div />
- </ValidationInput>
- )
- ).toMatchSnapshot();
-});
-
-it('should render when valid', () => {
- expect(
- shallow(
- <ValidationInput
- description="My description"
- error={undefined}
- id="field-id"
- isInvalid={false}
- isValid={true}
- label="Field label"
- required={true}>
- <div />
- </ValidationInput>
- )
- ).toMatchSnapshot();
-});
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx b/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx
deleted file mode 100644
index f4af7f14294..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/ValidationModal-test.tsx
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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 { shallow } from 'enzyme';
-import ValidationModal from '../ValidationModal';
-
-it('should render correctly', () => {
- const wrapper = shallow(
- <ValidationModal<{ field: string }>
- confirmButtonText="confirm"
- header="title"
- initialValues={{ field: 'foo' }}
- isDestructive={true}
- isInitialValid={true}
- onClose={jest.fn()}
- onSubmit={jest.fn()}
- validate={jest.fn()}>
- {props => (
- <input
- name="field"
- onBlur={props.handleBlur}
- onChange={props.handleChange}
- type="text"
- value={props.values.field}
- />
- )}
- </ValidationModal>
- );
- expect(wrapper).toMatchSnapshot();
-});
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/BoxedGroupAccordion-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/BoxedGroupAccordion-test.tsx.snap
deleted file mode 100644
index 0c7b74b79d9..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/BoxedGroupAccordion-test.tsx.snap
+++ /dev/null
@@ -1,26 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render correctly 1`] = `
-<div
- className="boxed-group boxed-group-accordion"
->
- <div
- className="boxed-group-header"
- onClick={[Function]}
- role="listitem"
- >
- <span
- className="boxed-group-accordion-title"
- >
- <OpenCloseIcon
- className="little-spacer-right"
- open={false}
- />
- Foo
- </span>
- <div>
- header content
- </div>
- </div>
-</div>
-`;
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.tsx.snap
deleted file mode 100644
index 792343f1a73..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/SearchSelect-test.tsx.snap
+++ /dev/null
@@ -1,17 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render Select 1`] = `
-<Select
- autoFocus={true}
- escapeClearsValue={false}
- filterOption={[Function]}
- isLoading={false}
- noResultsText="select2.tooShort.2"
- onBlurResetsInput={true}
- onChange={[Function]}
- onInputChange={[Function]}
- options={Array []}
- placeholder="search_verb"
- searchable={true}
-/>
-`;
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationForm-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationForm-test.tsx.snap
deleted file mode 100644
index e00f009ef2f..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationForm-test.tsx.snap
+++ /dev/null
@@ -1,19 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render and submit 1`] = `
-<Formik
- enableReinitialize={false}
- initialValues={
- Object {
- "foo": "bar",
- }
- }
- isInitialValid={false}
- onSubmit={[Function]}
- validate={[MockFunction]}
- validateOnBlur={true}
- validateOnChange={true}
->
- <Component />
-</Formik>
-`;
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationInput-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationInput-test.tsx.snap
deleted file mode 100644
index e417b038bc6..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationInput-test.tsx.snap
+++ /dev/null
@@ -1,104 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render 1`] = `
-<div>
- <label
- htmlFor="field-id"
- >
- <span
- className="text-middle"
- >
- <strong>
- Field label
- </strong>
- <em
- className="mandatory"
- >
- *
- </em>
- </span>
- <HelpTooltip
- className="spacer-left"
- overlay="Help message"
- />
- </label>
- <div
- className="little-spacer-top spacer-bottom"
- >
- <div />
- </div>
- <div
- className="note abs-width-400"
- >
- My description
- </div>
-</div>
-`;
-
-exports[`should render when valid 1`] = `
-<div>
- <label
- htmlFor="field-id"
- >
- <span
- className="text-middle"
- >
- <strong>
- Field label
- </strong>
- <em
- className="mandatory"
- >
- *
- </em>
- </span>
- </label>
- <div
- className="little-spacer-top spacer-bottom"
- >
- <div />
- <AlertSuccessIcon
- className="spacer-left text-middle"
- />
- </div>
- <div
- className="note abs-width-400"
- >
- My description
- </div>
-</div>
-`;
-
-exports[`should render with error 1`] = `
-<div>
- <label
- htmlFor="field-id"
- >
- <span
- className="text-middle"
- >
- <strong>
- Field label
- </strong>
- </span>
- </label>
- <div
- className="little-spacer-top spacer-bottom"
- >
- <div />
- <AlertErrorIcon
- className="spacer-left text-middle"
- />
- <span
- className="little-spacer-left text-danger text-middle"
- >
- Field error message
- </span>
- </div>
- <div
- className="note abs-width-400"
- >
- My description
- </div>
-</div>
-`;
diff --git a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationModal-test.tsx.snap b/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationModal-test.tsx.snap
deleted file mode 100644
index ecf12ce47b4..00000000000
--- a/server/sonar-web/src/main/js/components/controls/__tests__/__snapshots__/ValidationModal-test.tsx.snap
+++ /dev/null
@@ -1,21 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render correctly 1`] = `
-<Modal
- contentLabel="title"
- onRequestClose={[MockFunction]}
->
- <ValidationForm
- initialValues={
- Object {
- "field": "foo",
- }
- }
- isInitialValid={true}
- onSubmit={[Function]}
- validate={[MockFunction]}
- >
- <Component />
- </ValidationForm>
-</Modal>
-`;
diff --git a/server/sonar-web/src/main/js/components/controls/react-select.css b/server/sonar-web/src/main/js/components/controls/react-select.css
deleted file mode 100644
index 463c0044f47..00000000000
--- a/server/sonar-web/src/main/js/components/controls/react-select.css
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2019 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.
- */
-.Select {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- font-size: var(--smallFontSize);
- text-align: left;
-}
-
-.Select,
-.Select div,
-.Select input,
-.Select span {
- box-sizing: border-box;
-}
-
-.Select.is-disabled > .Select-control {
- background-color: var(--disableGrayBg) !important;
- border-color: var(--disableGrayBorder) !important;
-}
-
-.Select.is-disabled > .Select-control:hover {
- box-shadow: none !important;
-}
-
-.Select.is-disabled .Select-arrow-zone {
- cursor: not-allowed !important;
- pointer-events: none !important;
-}
-
-.Select.is-disabled .Select-placeholder,
-.Select.is-disabled .Select-value {
- color: var(--disableGrayText) !important;
-}
-
-.Select-control {
- position: relative;
- display: table;
- width: 100%;
- height: var(--controlHeight);
- line-height: calc(var(--controlHeight) - 2px);
- border: 1px solid var(--gray80);
- border-collapse: separate;
- border-radius: 2px;
- background-color: #fff;
- color: var(--baseFontColor);
- cursor: default;
- outline: none;
- overflow: hidden;
-}
-
-.is-searchable.is-open > .Select-control {
- cursor: text;
-}
-
-.is-open > .Select-control {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- background: #fff;
-}
-
-.is-open > .Select-control > .Select-arrow {
- border-color: transparent transparent #999;
- border-width: 0 5px 5px;
-}
-
-.is-searchable.is-focused:not(.is-open) > .Select-control {
- cursor: text;
-}
-
-.is-focused:not(.is-open) > .Select-control {
- border-color: var(--blue);
-}
-
-.Select-placeholder {
- color: var(--secondFontColor);
-}
-
-.Select-placeholder,
-:not(.Select--multi) > .Select-control .Select-value {
- bottom: 0;
- left: 0;
- line-height: 23px;
- padding-left: 8px;
- padding-right: 24px;
- position: absolute;
- right: 0;
- top: 0;
- max-width: 100%;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.Select-value [class^='icon-'] {
- padding-top: 5px;
-}
-
-.Select-value svg,
-.Select-value img {
- padding-top: 4px;
-}
-
-.Select-value .outline-badge,
-.Select-option .outline-badge {
- height: 20px;
- line-height: 19px;
- margin-top: 1px;
-}
-
-.Select-option svg,
-.Select-option img,
-.Select-option [class^='icon-'] {
- padding-top: 2px;
-}
-
-.has-value:not(.Select--multi) > .Select-control > .Select-value .Select-value-label,
-.has-value.is-pseudo-focused:not(.Select--multi)
- > .Select-control
- > .Select-value
- .Select-value-label {
- color: var(--baseFontColor);
-}
-
-.has-value:not(.Select--multi) > .Select-control > .Select-value a.Select-value-label,
-.has-value.is-pseudo-focused:not(.Select--multi)
- > .Select-control
- > .Select-value
- a.Select-value-label {
- cursor: pointer;
- text-decoration: none;
-}
-
-.has-value:not(.Select--multi) > .Select-control > .Select-value a.Select-value-label:hover,
-.has-value.is-pseudo-focused:not(.Select--multi)
- > .Select-control
- > .Select-value
- a.Select-value-label:hover,
-.has-value:not(.Select--multi) > .Select-control > .Select-value a.Select-value-label:focus,
-.has-value.is-pseudo-focused:not(.Select--multi)
- > .Select-control
- > .Select-value
- a.Select-value-label:focus {
- color: #007eff;
- outline: none;
- text-decoration: underline;
-}
-
-.Select-input {
- vertical-align: top;
- height: 22px;
- padding-left: 8px;
- padding-right: 8px;
- outline: none;
-}
-
-.Select-input > input {
- background: none transparent;
- border: 0 none;
- cursor: default;
- display: inline-block;
- font-family: inherit;
- font-size: var(--smallFontSize);
- height: 22px;
- margin: 0;
- outline: none;
- padding: 0;
- box-shadow: none;
- -webkit-appearance: none;
-}
-
-.is-focused .Select-input > input {
- cursor: text;
-}
-
-.has-value.is-pseudo-focused .Select-input {
- opacity: 0;
-}
-
-.Select-control:not(.is-searchable) > .Select-input {
- outline: none;
-}
-
-.Select-loading-zone {
- cursor: pointer;
- display: table-cell;
- position: relative;
- text-align: center;
- vertical-align: middle;
- width: 16px;
-}
-
-.Select-loading {
- -webkit-animation: Select-animation-spin 400ms infinite linear;
- -o-animation: Select-animation-spin 400ms infinite linear;
- animation: Select-animation-spin 400ms infinite linear;
- width: 16px;
- height: 16px;
- box-sizing: border-box;
- border-radius: 50%;
- border: 2px solid #ccc;
- border-right-color: var(--baseFontColor);
- display: inline-block;
- position: relative;
- vertical-align: middle;
-}
-
-.Select-clear-zone {
- -webkit-animation: Select-animation-fadeIn 200ms;
- -o-animation: Select-animation-fadeIn 200ms;
- animation: Select-animation-fadeIn 200ms;
- color: #999;
- cursor: pointer;
- display: table-cell;
- position: relative;
- text-align: center;
- vertical-align: middle;
- width: 16px;
- height: 16px;
- padding-right: 4px;
-}
-
-.Select-clear-zone:hover .Select-clear {
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAxNCAxNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNDE0MjE7Ij4gICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC4wMjM0Mzc1LDAsMCwwLjAyMzQzNzUsLTUuMDE1NjIsLTUuMDE1NjIpIj4gICAgICAgIDxwYXRoIGQ9Ik04MTAsMjc0TDU3Miw1MTJMODEwLDc1MEw3NTAsODEwTDUxMiw1NzJMMjc0LDgxMEwyMTQsNzUwTDQ1Miw1MTJMMjE0LDI3NEwyNzQsMjE0TDUxMiw0NTJMNzUwLDIxNEw4MTAsMjc0WiIgc3R5bGU9ImZpbGw6cmdiKDIzMSwyMCw1Nik7ZmlsbC1ydWxlOm5vbnplcm87Ii8+ICAgIDwvZz48L3N2Zz4=);
-}
-
-.Select-clear {
- display: block;
- width: 9px;
- height: 9px;
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAxNCAxNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNDE0MjE7Ij4gICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC4wMjM0Mzc1LDAsMCwwLjAyMzQzNzUsLTUuMDE1NjIsLTUuMDE1NjIpIj4gICAgICAgIDxwYXRoIGQ9Ik04MTAsMjc0TDU3Miw1MTJMODEwLDc1MEw3NTAsODEwTDUxMiw1NzJMMjc0LDgxMEwyMTQsNzUwTDQ1Miw1MTJMMjE0LDI3NEwyNzQsMjE0TDUxMiw0NTJMNzUwLDIxNEw4MTAsMjc0WiIgc3R5bGU9ImZpbGw6cmdiKDE1MywxNTMsMTUzKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4gICAgPC9nPjwvc3ZnPg==);
- background-size: 9px 9px;
- text-indent: -9999px;
-}
-
-.Select--multi .Select-clear-zone {
- width: 17px;
-}
-
-.Select-arrow-zone {
- cursor: pointer;
- display: table-cell;
- position: relative;
- text-align: center;
- vertical-align: middle;
- width: 20px;
- padding-right: 5px;
-}
-
-.Select-arrow {
- border-color: #999 transparent transparent;
- border-style: solid;
- border-width: 4px 4px 2px;
- display: inline-block;
- height: 0;
- width: 0;
-}
-
-.is-open .Select-arrow,
-.Select-arrow-zone:hover > .Select-arrow {
- border-top-color: #666;
-}
-
-@-webkit-keyframes Select-animation-fadeIn {
- from {
- opacity: 0;
- }
-
- to {
- opacity: 1;
- }
-}
-
-@keyframes Select-animation-fadeIn {
- from {
- opacity: 0;
- }
-
- to {
- opacity: 1;
- }
-}
-
-.Select-menu-outer {
- border-bottom-right-radius: 4px;
- border-bottom-left-radius: 4px;
- background-color: #fff;
- border: 1px solid #ccc;
- border-top-color: var(--barBorderColor);
- box-sizing: border-box;
- margin-top: -1px;
- max-height: 200px;
- position: absolute;
- top: 100%;
- width: 100%;
- z-index: var(--dropdownMenuZIndex);
- -webkit-overflow-scrolling: touch;
- box-shadow: var(--defaultShadow);
-}
-
-.Select-menu {
- max-height: 198px;
- padding: 5px 0;
- overflow-y: auto;
-}
-
-.Select-option {
- display: block;
- line-height: 20px;
- padding: 0 8px;
- box-sizing: border-box;
- color: var(--baseFontColor);
- font-size: var(--smallFontSize);
- cursor: pointer;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.Select-option:last-child {
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
-}
-
-.Select-option.is-focused {
- background-color: var(--barBackgroundColor);
-}
-
-.Select-option.is-disabled {
- font-weight: 600;
- cursor: default;
-}
-
-.Select-noresults {
- box-sizing: border-box;
- color: #999;
- cursor: default;
- display: block;
- padding: 8px 10px;
-}
-
-.Select--multi .Select-value {
- background-color: rgba(0, 126, 255, 0.08);
- border-radius: 2px;
- border: 1px solid rgba(0, 126, 255, 0.24);
- color: var(--baseFontColor);
- display: inline-block;
- font-size: var(--smallFontSize);
- line-height: 14px;
- margin: 1px 4px 1px 1px;
- vertical-align: top;
-}
-
-.Select-value-label {
- font-size: var(--smallFontSize);
-}
-
-.is-searchable.is-open .Select-value-label {
- opacity: 0.5;
-}
-
-.Select-big .Select-control {
- padding-top: 4px;
- padding-bottom: 4px;
-}
-
-.Select-big .Select-placeholder {
- margin-top: 4px;
- margin-bottom: 4px;
-}
-
-.Select-big .Select-value-label {
- display: inline-block;
- margin-top: 7px;
- line-height: 16px;
-}
-
-.Select-big .Select-option {
- padding: 7px 8px;
- line-height: 16px;
-}
-
-.Select-big img,
-.Select-big svg {
- padding-top: 0;
-}
-
-.Select--multi .Select-value-icon,
-.Select--multi .Select-value-label {
- display: inline-block;
- vertical-align: middle;
-}
-
-.Select--multi .Select-value-label {
- display: inline-block;
- max-width: 200px;
- border-bottom-right-radius: 2px;
- border-top-right-radius: 2px;
- cursor: default;
- padding: 2px 5px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.Select--multi a.Select-value-label {
- color: #007eff;
- cursor: pointer;
- text-decoration: none;
-}
-
-.Select--multi a.Select-value-label:hover {
- text-decoration: underline;
-}
-
-.Select--multi .Select-value-icon {
- cursor: pointer;
- border-bottom-left-radius: 2px;
- border-top-left-radius: 2px;
- border-right: 1px solid rgba(0, 126, 255, 0.24);
- padding: 1px 5px;
-}
-
-.Select--multi .Select-value-icon:hover,
-.Select--multi .Select-value-icon:focus {
- background-color: rgba(0, 113, 230, 0.08);
- color: #0071e6;
-}
-
-.Select--multi .Select-value-icon:active {
- background-color: rgba(0, 126, 255, 0.24);
-}
-
-.Select--multi.is-disabled .Select-value {
- background-color: #fcfcfc;
- border: 1px solid #e3e3e3;
- color: var(--baseFontColor);
-}
-
-.Select--multi.is-disabled .Select-value-icon {
- cursor: not-allowed;
- border-right: 1px solid #e3e3e3;
-}
-
-.Select--multi.is-disabled .Select-value-icon:hover,
-.Select--multi.is-disabled .Select-value-icon:focus,
-.Select--multi.is-disabled .Select-value-icon:active {
- background-color: #fcfcfc;
-}
-
-.Select-aria-only {
- display: none;
-}
-
-@keyframes Select-animation-spin {
- to {
- transform: rotate(1turn);
- }
-}
-
-@-webkit-keyframes Select-animation-spin {
- to {
- -webkit-transform: rotate(1turn);
- }
-}
diff --git a/server/sonar-web/yarn.lock b/server/sonar-web/yarn.lock
index d12b6eb2844..ede9c74a051 100644
--- a/server/sonar-web/yarn.lock
+++ b/server/sonar-web/yarn.lock
@@ -956,11 +956,6 @@
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-color/-/d3-color-1.2.2.tgz#80cf7cfff7401587b8f89307ba36fe4a576bc7cf"
integrity sha1-gM98//dAFYe4+JMHujb+Sldrx88=
-"@types/d3-hierarchy@1.1.4":
- version "1.1.4"
- resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-hierarchy/-/d3-hierarchy-1.1.4.tgz#b04dfcb1f2074da789ada10fe4942d13f0bce421"
- integrity sha1-sE38sfIHTaeJraEP5JQtE/C85CE=
-
"@types/d3-interpolate@*":
version "1.3.1"
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-interpolate/-/d3-interpolate-1.3.1.tgz#1c280511f622de9b0b47d463fa55f9a4fd6f5fc8"
@@ -968,11 +963,6 @@
dependencies:
"@types/d3-color" "*"
-"@types/d3-path@*":
- version "1.0.8"
- resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-path/-/d3-path-1.0.8.tgz#48e6945a8ff43ee0a1ce85c8cfa2337de85c7c79"
- integrity sha1-SOaUWo/0PuChzoXIz6IzfehcfHk=
-
"@types/d3-scale@2.0.2":
version "2.0.2"
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-scale/-/d3-scale-2.0.2.tgz#61145948aa1a52ab31384766cd013308699112b3"
@@ -990,13 +980,6 @@
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-selection/-/d3-selection-1.3.2.tgz#dd5661a560ba9ce3aba823c424b8d4a1bc7e833f"
integrity sha1-3VZhpWC6nOOrqCPEJLjUobx+gz8=
-"@types/d3-shape@1.2.4":
- version "1.2.4"
- resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-shape/-/d3-shape-1.2.4.tgz#e65585f2254d83ae42c47af2e730dd9b97952996"
- integrity sha1-5lWF8iVNg65CxHry5zDdm5eVKZY=
- dependencies:
- "@types/d3-path" "*"
-
"@types/d3-time@*":
version "1.0.10"
resolved "https://repox.jfrog.io/repox/api/npm/npm/@types/d3-time/-/d3-time-1.0.10.tgz#d338c7feac93a98a32aac875d1100f92c7b61f4f"
@@ -9280,11 +9263,12 @@ sockjs@0.3.19:
faye-websocket "^0.10.0"
uuid "^3.0.1"
-sonar-ui-common@0.0.11:
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/sonar-ui-common/-/sonar-ui-common-0.0.11.tgz#b9aee225da16564d5b823ca2fb103f6d913db719"
- integrity sha512-Q3Umwf+nVnH0J6XUR104PRpLN8aGAlqZHOA2oxaJVzhwT26o80A6i0i6PZAkzrbqQE4jhTRBQ396oalihI0s2g==
+sonar-ui-common@0.0.13:
+ version "0.0.13"
+ resolved "https://repox.jfrog.io/repox/api/npm/npm/sonar-ui-common/-/sonar-ui-common-0.0.13.tgz#b01255f32d7863e529117bfe715890edfcdb8c97"
+ integrity sha1-sBJV8y14Y+UpEXv+cViQ7fzbjJc=
dependencies:
+ "@types/react-select" "1.2.6"
classnames "2.2.6"
clipboard "2.0.4"
d3-array "1.2.4"
@@ -9294,12 +9278,14 @@ sonar-ui-common@0.0.11:
d3-shape "1.2.2"
d3-zoom "1.7.3"
date-fns "1.30.1"
+ formik "1.2.0"
history "3.3.0"
lodash "4.17.11"
react-draggable "3.2.1"
react-intl "2.8.0"
react-modal "3.8.2"
react-router "3.2.1"
+ react-select "1.2.1"
react-virtualized "9.21.0"
sort-keys@^2.0.0: