diff --git a/superset-frontend/spec/javascripts/datasource/DatasourceEditor_spec.jsx b/superset-frontend/spec/javascripts/datasource/DatasourceEditor_spec.jsx
index 031dea9b9f33f..e006aaa8d9241 100644
--- a/superset-frontend/spec/javascripts/datasource/DatasourceEditor_spec.jsx
+++ b/superset-frontend/spec/javascripts/datasource/DatasourceEditor_spec.jsx
@@ -21,7 +21,7 @@ import { shallow } from 'enzyme';
import configureStore from 'redux-mock-store';
import fetchMock from 'fetch-mock';
import thunk from 'redux-thunk';
-import { Radio } from 'react-bootstrap';
+import { Radio } from 'src/common/components/Radio';
import Icon from 'src/components/Icon';
import Tabs from 'src/common/components/Tabs';
diff --git a/superset-frontend/spec/javascripts/explore/components/DateFilterControl_spec.jsx b/superset-frontend/spec/javascripts/explore/components/DateFilterControl_spec.jsx
index aaa308fcb1240..dcc58edf82b99 100644
--- a/superset-frontend/spec/javascripts/explore/components/DateFilterControl_spec.jsx
+++ b/superset-frontend/spec/javascripts/explore/components/DateFilterControl_spec.jsx
@@ -18,7 +18,7 @@
*/
/* eslint-disable no-unused-expressions */
import React from 'react';
-import { Radio } from 'react-bootstrap';
+import { Radio } from 'src/common/components/Radio';
import sinon from 'sinon';
import { styledMount as mount } from 'spec/helpers/theming';
diff --git a/superset-frontend/spec/javascripts/explore/components/SaveModal_spec.jsx b/superset-frontend/spec/javascripts/explore/components/SaveModal_spec.jsx
index 1c3c50cc1cbf5..ba81b2c1c3035 100644
--- a/superset-frontend/spec/javascripts/explore/components/SaveModal_spec.jsx
+++ b/superset-frontend/spec/javascripts/explore/components/SaveModal_spec.jsx
@@ -24,7 +24,8 @@ import { Provider } from 'react-redux';
import { shallow } from 'enzyme';
import { styledMount as mount } from 'spec/helpers/theming';
-import { FormControl, Radio } from 'react-bootstrap';
+import { FormControl } from 'react-bootstrap';
+import { Radio } from 'src/common/components/Radio';
import Button from 'src/components/Button';
import sinon from 'sinon';
import fetchMock from 'fetch-mock';
diff --git a/superset-frontend/spec/javascripts/sqllab/SaveDatasetModal_spec.tsx b/superset-frontend/spec/javascripts/sqllab/SaveDatasetModal_spec.tsx
index 1fe721a122cf4..97fe25ba908d1 100644
--- a/superset-frontend/spec/javascripts/sqllab/SaveDatasetModal_spec.tsx
+++ b/superset-frontend/spec/javascripts/sqllab/SaveDatasetModal_spec.tsx
@@ -18,7 +18,8 @@
*/
import React from 'react';
import { shallow } from 'enzyme';
-import { Radio, AutoComplete, Input } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
+import { AutoComplete, Input } from 'src/common/components';
import { SaveDatasetModal } from 'src/SqlLab/components/SaveDatasetModal';
describe('SaveDatasetModal', () => {
diff --git a/superset-frontend/src/SqlLab/components/SaveDatasetModal.tsx b/superset-frontend/src/SqlLab/components/SaveDatasetModal.tsx
index 990307ee65fed..b2de6d454b902 100644
--- a/superset-frontend/src/SqlLab/components/SaveDatasetModal.tsx
+++ b/superset-frontend/src/SqlLab/components/SaveDatasetModal.tsx
@@ -19,7 +19,8 @@
import React, { FunctionComponent } from 'react';
import { AutoCompleteProps } from 'antd/lib/auto-complete';
-import { Radio, AutoComplete, Input } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
+import { AutoComplete, Input } from 'src/common/components';
import StyledModal from 'src/common/components/Modal';
import Button from 'src/components/Button';
import { styled, t } from '@superset-ui/core';
diff --git a/superset-frontend/src/common/components/Radio/Radio.stories.tsx b/superset-frontend/src/common/components/Radio/Radio.stories.tsx
new file mode 100644
index 0000000000000..2688cd7ca1548
--- /dev/null
+++ b/superset-frontend/src/common/components/Radio/Radio.stories.tsx
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import React from 'react';
+import { useArgs } from '@storybook/client-api';
+import { Radio } from './index';
+
+export default {
+ title: 'Radio',
+ component: Radio,
+ parameters: {
+ controls: { hideNoControlsWarning: true },
+ },
+ argTypes: {
+ theme: {
+ table: {
+ disable: true,
+ },
+ },
+ checked: { control: 'boolean' },
+ disabled: { control: 'boolean' },
+ },
+};
+
+export const SupersetRadio = () => {
+ const [{ checked, ...rest }, updateArgs] = useArgs();
+ return (
+ updateArgs({ checked: !checked })}
+ {...rest}
+ >
+ Example
+
+ );
+};
+
+SupersetRadio.args = {
+ checked: false,
+ disabled: false,
+};
diff --git a/superset-frontend/src/common/components/Radio.tsx b/superset-frontend/src/common/components/Radio/index.tsx
similarity index 76%
rename from superset-frontend/src/common/components/Radio.tsx
rename to superset-frontend/src/common/components/Radio/index.tsx
index 3134fb7bab531..a80662adc17e8 100644
--- a/superset-frontend/src/common/components/Radio.tsx
+++ b/superset-frontend/src/common/components/Radio/index.tsx
@@ -21,20 +21,26 @@ import { Radio as BaseRadio } from 'src/common/components';
const StyledRadio = styled(BaseRadio)`
.ant-radio-inner {
- width: 18px;
- height: 18px;
+ top: -1px;
+ left: 2px;
+ width: ${({ theme }) => theme.gridUnit * 4}px;
+ height: ${({ theme }) => theme.gridUnit * 4}px;
border-width: 2px;
- border-color: ${({ theme }) => theme.colors.grayscale.base};
+ border-color: ${({ theme }) => theme.colors.grayscale.light2};
}
.ant-radio.ant-radio-checked {
.ant-radio-inner {
- background-color: ${({ theme }) => theme.colors.primary.dark1};
- border-color: ${({ theme }) => theme.colors.primary.dark1};
+ border-width: ${({ theme }) => theme.gridUnit + 1}px;
+ border-color: ${({ theme }) => theme.colors.primary.base};
}
.ant-radio-inner::after {
background-color: ${({ theme }) => theme.colors.grayscale.light5};
+ top: 0;
+ left: 0;
+ width: ${({ theme }) => theme.gridUnit + 2}px;
+ height: ${({ theme }) => theme.gridUnit + 2}px;
}
}
diff --git a/superset-frontend/src/common/components/common.stories.tsx b/superset-frontend/src/common/components/common.stories.tsx
index f46ded72c6f25..d850a23759e0d 100644
--- a/superset-frontend/src/common/components/common.stories.tsx
+++ b/superset-frontend/src/common/components/common.stories.tsx
@@ -332,6 +332,7 @@ export const CollapseAnimateArrows = () => (
);
+
export function StyledCronPicker() {
// @ts-ignore
const inputRef = useRef(null);
diff --git a/superset-frontend/src/common/components/index.tsx b/superset-frontend/src/common/components/index.tsx
index f56b09e4fd569..d91c9861ae2dc 100644
--- a/superset-frontend/src/common/components/index.tsx
+++ b/superset-frontend/src/common/components/index.tsx
@@ -58,7 +58,7 @@ export {
} from 'antd';
export { TreeProps } from 'antd/lib/tree';
export { FormInstance } from 'antd/lib/form';
-
+export { RadioChangeEvent } from 'antd/lib/radio';
export { default as Collapse } from './Collapse';
export { default as Badge } from './Badge';
export { default as Progress } from './ProgressBar';
diff --git a/superset-frontend/src/dashboard/components/SaveModal.tsx b/superset-frontend/src/dashboard/components/SaveModal.tsx
index a377edb9febd3..0bbc327767558 100644
--- a/superset-frontend/src/dashboard/components/SaveModal.tsx
+++ b/superset-frontend/src/dashboard/components/SaveModal.tsx
@@ -18,7 +18,9 @@
*/
/* eslint-env browser */
import React from 'react';
-import { FormControl, FormGroup, Radio } from 'react-bootstrap';
+import { FormControl, FormGroup } from 'react-bootstrap';
+import { RadioChangeEvent } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
import Button from 'src/components/Button';
import { t, CategoricalColorNamespace, JsonResponse } from '@superset-ui/core';
@@ -101,7 +103,7 @@ class SaveModal extends React.PureComponent {
}));
}
- handleSaveTypeChange(event: React.FormEvent) {
+ handleSaveTypeChange(event: RadioChangeEvent) {
this.setState({
saveType: (event.target as HTMLInputElement).value as SaveType,
});
diff --git a/superset-frontend/src/dashboard/components/nativeFilters/FilterScope.tsx b/superset-frontend/src/dashboard/components/nativeFilters/FilterScope.tsx
index bd8eccb75de39..75a4382872d13 100644
--- a/superset-frontend/src/dashboard/components/nativeFilters/FilterScope.tsx
+++ b/superset-frontend/src/dashboard/components/nativeFilters/FilterScope.tsx
@@ -19,9 +19,9 @@
import React, { FC } from 'react';
import { t, styled } from '@superset-ui/core';
+import { Radio } from 'src/common/components/Radio';
import {
Form,
- Radio,
Typography,
Space,
FormInstance,
diff --git a/superset-frontend/src/datasource/DatasourceEditor.jsx b/superset-frontend/src/datasource/DatasourceEditor.jsx
index ca19a5c05fb93..575df5d5b942e 100644
--- a/superset-frontend/src/datasource/DatasourceEditor.jsx
+++ b/superset-frontend/src/datasource/DatasourceEditor.jsx
@@ -18,7 +18,8 @@
*/
import React from 'react';
import PropTypes from 'prop-types';
-import { Alert, Col, Radio, Well } from 'react-bootstrap';
+import { Alert, Col, Well } from 'react-bootstrap';
+import { Radio } from 'src/common/components/Radio';
import Badge from 'src/common/components/Badge';
import shortid from 'shortid';
import { styled, SupersetClient, t, supersetTheme } from '@superset-ui/core';
diff --git a/superset-frontend/src/explore/components/SaveModal.tsx b/superset-frontend/src/explore/components/SaveModal.tsx
index 46d0d5a10a387..36e8bf3d83b4c 100644
--- a/superset-frontend/src/explore/components/SaveModal.tsx
+++ b/superset-frontend/src/explore/components/SaveModal.tsx
@@ -18,9 +18,10 @@
*/
/* eslint camelcase: 0 */
import React from 'react';
-import { Alert, FormControl, FormGroup, Radio } from 'react-bootstrap';
+import { Alert, FormControl, FormGroup } from 'react-bootstrap';
import { JsonObject, t, styled } from '@superset-ui/core';
import ReactMarkdown from 'react-markdown';
+import { Radio } from 'src/common/components/Radio';
import Modal from 'src/common/components/Modal';
import Button from 'src/components/Button';
import FormLabel from 'src/components/FormLabel';
@@ -216,7 +217,6 @@ class SaveModal extends React.Component {
this.changeAction('overwrite')}
@@ -227,7 +227,6 @@ class SaveModal extends React.Component {
this.changeAction('saveas')}
>
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl.jsx b/superset-frontend/src/explore/components/controls/DateFilterControl.jsx
index 5b0f15a5e7e25..1b26c6d57cd72 100644
--- a/superset-frontend/src/explore/components/controls/DateFilterControl.jsx
+++ b/superset-frontend/src/explore/components/controls/DateFilterControl.jsx
@@ -18,10 +18,11 @@
*/
import React from 'react';
import PropTypes from 'prop-types';
-import { FormControl, FormGroup, InputGroup, Radio } from 'react-bootstrap';
+import { FormControl, FormGroup, InputGroup } from 'react-bootstrap';
import { Tooltip } from 'src/common/components/Tooltip';
import Popover from 'src/common/components/Popover';
import { Select, Input } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
import Button from 'src/components/Button';
import Datetime from 'react-datetime';
import 'react-datetime/css/react-datetime.css';
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CalendarFrame.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CalendarFrame.tsx
index 0be926de47da8..b2c31d273548e 100644
--- a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CalendarFrame.tsx
+++ b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CalendarFrame.tsx
@@ -18,7 +18,7 @@
*/
import React from 'react';
import { t } from '@superset-ui/core';
-import { Radio } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
import { CALENDAR_RANGE_OPTIONS, CALENDAR_RANGE_SET } from '../constants';
import {
CalendarRangeType,
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CommonFrame.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CommonFrame.tsx
index d51b94344a82f..e4df91e523eb8 100644
--- a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CommonFrame.tsx
+++ b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CommonFrame.tsx
@@ -18,7 +18,7 @@
*/
import React from 'react';
import { t } from '@superset-ui/core';
-import { Radio } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
import { COMMON_RANGE_OPTIONS, COMMON_RANGE_SET } from '../constants';
import { CommonRangeType, FrameComponentProps } from '../types';
diff --git a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CustomFrame.tsx b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CustomFrame.tsx
index 08045ee1c10e7..cfc5d4853efdf 100644
--- a/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CustomFrame.tsx
+++ b/superset-frontend/src/explore/components/controls/DateFilterControl/frame/CustomFrame.tsx
@@ -20,13 +20,8 @@ import React from 'react';
import { t } from '@superset-ui/core';
import { Moment } from 'moment';
import { isInteger } from 'lodash';
-import {
- Col,
- DatePicker,
- InputNumber,
- Radio,
- Row,
-} from 'src/common/components';
+import { Col, DatePicker, InputNumber, Row } from 'src/common/components';
+import { Radio } from 'src/common/components/Radio';
import { Select } from 'src/components/Select';
import {
SINCE_GRAIN_OPTIONS,