fix: Enable ESLint rule default-props-match-prop-types (#11058)
* Re-enable ESLint rule default-props-match-props-types * Add cypress test for switching tabs * fix * Typo fix * Test fix
This commit is contained in:
parent
d95b7c2a73
commit
07f87149e6
|
|
@ -122,7 +122,6 @@ module.exports = {
|
||||||
'padded-blocks': 0,
|
'padded-blocks': 0,
|
||||||
'prefer-arrow-callback': 0,
|
'prefer-arrow-callback': 0,
|
||||||
'prefer-destructuring': ['error', { object: true, array: false }],
|
'prefer-destructuring': ['error', { object: true, array: false }],
|
||||||
'react/default-props-match-prop-types': 0, // disabled temporarily
|
|
||||||
'react/destructuring-assignment': 0, // re-enable up for discussion
|
'react/destructuring-assignment': 0, // re-enable up for discussion
|
||||||
'react/forbid-prop-types': 0,
|
'react/forbid-prop-types': 0,
|
||||||
'react/jsx-filename-extension': [1, { extensions: ['.jsx', '.tsx'] }],
|
'react/jsx-filename-extension': [1, { extensions: ['.jsx', '.tsx'] }],
|
||||||
|
|
@ -233,7 +232,6 @@ module.exports = {
|
||||||
'prefer-arrow-callback': 0,
|
'prefer-arrow-callback': 0,
|
||||||
'prefer-object-spread': 1,
|
'prefer-object-spread': 1,
|
||||||
'prefer-destructuring': ['error', { object: true, array: false }],
|
'prefer-destructuring': ['error', { object: true, array: false }],
|
||||||
'react/default-props-match-prop-types': 0, // disabled temporarily
|
|
||||||
'react/destructuring-assignment': 0, // re-enable up for discussion
|
'react/destructuring-assignment': 0, // re-enable up for discussion
|
||||||
'react/forbid-prop-types': 0,
|
'react/forbid-prop-types': 0,
|
||||||
'react/jsx-filename-extension': [1, { extensions: ['.jsx', '.tsx'] }],
|
'react/jsx-filename-extension': [1, { extensions: ['.jsx', '.tsx'] }],
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,22 @@ describe('Dashboard tabs', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should switch active tab on click', () => {
|
||||||
|
cy.wait('@filterRequest');
|
||||||
|
cy.wait('@treemapRequest');
|
||||||
|
|
||||||
|
cy.get('.dashboard-component-tabs')
|
||||||
|
.first()
|
||||||
|
.find('ul.nav.nav-tabs li')
|
||||||
|
.as('tabs');
|
||||||
|
|
||||||
|
cy.get('@tabs').first().click().should('have.class', 'active');
|
||||||
|
cy.get('@tabs').last().should('not.have.class', 'active');
|
||||||
|
|
||||||
|
cy.get('@tabs').last().click().should('have.class', 'active');
|
||||||
|
cy.get('@tabs').first().should('not.have.class', 'active');
|
||||||
|
});
|
||||||
|
|
||||||
it('should load charts when tab is visible', () => {
|
it('should load charts when tab is visible', () => {
|
||||||
// landing in first tab, should see 2 charts
|
// landing in first tab, should see 2 charts
|
||||||
cy.wait('@filterRequest');
|
cy.wait('@filterRequest');
|
||||||
|
|
|
||||||
|
|
@ -39,10 +39,9 @@ const propTypes = {
|
||||||
compact: PropTypes.bool,
|
compact: PropTypes.bool,
|
||||||
};
|
};
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
controlProps: {},
|
|
||||||
onChange: () => {},
|
onChange: () => {},
|
||||||
compact: false,
|
compact: false,
|
||||||
desc: null,
|
description: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class Field extends React.PureComponent {
|
export default class Field extends React.PureComponent {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import { t } from '@superset-ui/core';
|
||||||
import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls';
|
import { InfoTooltipWithTrigger } from '@superset-ui/chart-controls';
|
||||||
|
|
||||||
import Button from 'src/components/Button';
|
import Button from 'src/components/Button';
|
||||||
import { exploreChart } from '../../explore/exploreUtils';
|
import { exploreChart } from 'src/explore/exploreUtils';
|
||||||
import * as actions from '../actions/sqlLab';
|
import * as actions from '../actions/sqlLab';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
|
|
@ -37,10 +37,6 @@ const propTypes = {
|
||||||
templateParams: PropTypes.string,
|
templateParams: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultProps = {
|
|
||||||
vizRequest: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
class ExploreCtasResultsButton extends React.PureComponent {
|
class ExploreCtasResultsButton extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
@ -113,7 +109,6 @@ class ExploreCtasResultsButton extends React.PureComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExploreCtasResultsButton.propTypes = propTypes;
|
ExploreCtasResultsButton.propTypes = propTypes;
|
||||||
ExploreCtasResultsButton.defaultProps = defaultProps;
|
|
||||||
|
|
||||||
function mapStateToProps({ sqlLab, common }) {
|
function mapStateToProps({ sqlLab, common }) {
|
||||||
return {
|
return {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import TableSelector from '../../components/TableSelector';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
queryEditor: PropTypes.object.isRequired,
|
queryEditor: PropTypes.object.isRequired,
|
||||||
height: PropTypes.number.isRequired,
|
height: PropTypes.number,
|
||||||
tables: PropTypes.array,
|
tables: PropTypes.array,
|
||||||
actions: PropTypes.object,
|
actions: PropTypes.object,
|
||||||
database: PropTypes.object,
|
database: PropTypes.object,
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,6 @@ const propTypes = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
label: null,
|
|
||||||
description: null,
|
|
||||||
onChange: () => {},
|
onChange: () => {},
|
||||||
code: '{}',
|
code: '{}',
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ const propTypes = {
|
||||||
descr: PropTypes.string.isRequired,
|
descr: PropTypes.string.isRequired,
|
||||||
func: PropTypes.func,
|
func: PropTypes.func,
|
||||||
}),
|
}),
|
||||||
).isRequired,
|
),
|
||||||
header: PropTypes.string,
|
header: PropTypes.string,
|
||||||
placement: PropTypes.string,
|
placement: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -81,12 +81,12 @@ export default class OnPasteSelect extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
OnPasteSelect.propTypes = {
|
OnPasteSelect.propTypes = {
|
||||||
separator: PropTypes.array.isRequired,
|
separator: PropTypes.array,
|
||||||
selectWrap: PropTypes.elementType,
|
selectWrap: PropTypes.elementType,
|
||||||
selectRef: PropTypes.func,
|
selectRef: PropTypes.func,
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func.isRequired,
|
||||||
valueKey: PropTypes.string.isRequired,
|
valueKey: PropTypes.string,
|
||||||
labelKey: PropTypes.string.isRequired,
|
labelKey: PropTypes.string,
|
||||||
options: PropTypes.array,
|
options: PropTypes.array,
|
||||||
isMulti: PropTypes.bool,
|
isMulti: PropTypes.bool,
|
||||||
value: PropTypes.any,
|
value: PropTypes.any,
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import { getCategoricalSchemeRegistry, t } from '@superset-ui/core';
|
||||||
import ColorSchemeControl from 'src/explore/components/controls/ColorSchemeControl';
|
import ColorSchemeControl from 'src/explore/components/controls/ColorSchemeControl';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func,
|
||||||
colorScheme: PropTypes.string,
|
colorScheme: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ const propTypes = {
|
||||||
dashboardLayout: PropTypes.object.isRequired,
|
dashboardLayout: PropTypes.object.isRequired,
|
||||||
deleteTopLevelTabs: PropTypes.func.isRequired,
|
deleteTopLevelTabs: PropTypes.func.isRequired,
|
||||||
editMode: PropTypes.bool.isRequired,
|
editMode: PropTypes.bool.isRequired,
|
||||||
showBuilderPane: PropTypes.func.isRequired,
|
showBuilderPane: PropTypes.func,
|
||||||
colorScheme: PropTypes.string,
|
colorScheme: PropTypes.string,
|
||||||
setColorSchemeAndUnsavedChanges: PropTypes.func.isRequired,
|
setColorSchemeAndUnsavedChanges: PropTypes.func.isRequired,
|
||||||
handleComponentDrop: PropTypes.func.isRequired,
|
handleComponentDrop: PropTypes.func.isRequired,
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ import '../stylesheets/buttons.less';
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
dashboardId: PropTypes.number.isRequired,
|
dashboardId: PropTypes.number.isRequired,
|
||||||
show: PropTypes.bool.isRequired,
|
show: PropTypes.bool,
|
||||||
onHide: PropTypes.func,
|
onHide: PropTypes.func,
|
||||||
colorScheme: PropTypes.object,
|
colorScheme: PropTypes.object,
|
||||||
setColorSchemeAndUnsavedChanges: PropTypes.func,
|
setColorSchemeAndUnsavedChanges: PropTypes.func,
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ const propTypes = {
|
||||||
lastUpdated: PropTypes.number.isRequired,
|
lastUpdated: PropTypes.number.isRequired,
|
||||||
errorMessage: PropTypes.string,
|
errorMessage: PropTypes.string,
|
||||||
userId: PropTypes.string.isRequired,
|
userId: PropTypes.string.isRequired,
|
||||||
selectedSliceIds: PropTypes.arrayOf(PropTypes.number).isRequired,
|
selectedSliceIds: PropTypes.arrayOf(PropTypes.number),
|
||||||
editMode: PropTypes.bool,
|
editMode: PropTypes.bool,
|
||||||
height: PropTypes.number,
|
height: PropTypes.number,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,6 @@ const propTypes = {
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
innerRef: null,
|
innerRef: null,
|
||||||
forceRefresh: () => ({}),
|
forceRefresh: () => ({}),
|
||||||
removeSlice: () => ({}),
|
|
||||||
updateSliceName: () => ({}),
|
updateSliceName: () => ({}),
|
||||||
toggleExpandSlice: () => ({}),
|
toggleExpandSlice: () => ({}),
|
||||||
exploreChart: () => ({}),
|
exploreChart: () => ({}),
|
||||||
|
|
|
||||||
|
|
@ -56,10 +56,6 @@ const propTypes = {
|
||||||
updateComponents: PropTypes.func.isRequired,
|
updateComponents: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultProps = {
|
|
||||||
rowHeight: null,
|
|
||||||
};
|
|
||||||
|
|
||||||
class Row extends React.PureComponent {
|
class Row extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
@ -192,6 +188,5 @@ class Row extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
Row.propTypes = propTypes;
|
Row.propTypes = propTypes;
|
||||||
Row.defaultProps = defaultProps;
|
|
||||||
|
|
||||||
export default Row;
|
export default Row;
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ const propTypes = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
children: null,
|
|
||||||
renderTabContent: true,
|
renderTabContent: true,
|
||||||
renderHoverMenu: true,
|
renderHoverMenu: true,
|
||||||
availableColumnCount: 0,
|
availableColumnCount: 0,
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ const defaultProps = {
|
||||||
children: null,
|
children: null,
|
||||||
disableClick: false,
|
disableClick: false,
|
||||||
onChangeFocus: null,
|
onChangeFocus: null,
|
||||||
onPressDelete() {},
|
|
||||||
menuItems: [],
|
menuItems: [],
|
||||||
isFocused: false,
|
isFocused: false,
|
||||||
shouldFocus: (event, container) =>
|
shouldFocus: (event, container) =>
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ import PropTypes from 'prop-types';
|
||||||
import { bindActionCreators } from 'redux';
|
import { bindActionCreators } from 'redux';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
|
||||||
|
import { logEvent } from 'src/logger/actions';
|
||||||
|
import { addDangerToast } from 'src/messageToasts/actions';
|
||||||
import ComponentLookup from '../components/gridComponents';
|
import ComponentLookup from '../components/gridComponents';
|
||||||
import getDetailedComponentWidth from '../util/getDetailedComponentWidth';
|
import getDetailedComponentWidth from '../util/getDetailedComponentWidth';
|
||||||
import { getActiveFilters } from '../util/activeDashboardFilters';
|
import { getActiveFilters } from '../util/activeDashboardFilters';
|
||||||
|
|
@ -34,8 +36,6 @@ import {
|
||||||
handleComponentDrop,
|
handleComponentDrop,
|
||||||
} from '../actions/dashboardLayout';
|
} from '../actions/dashboardLayout';
|
||||||
import { setDirectPathToChild, setMountedTab } from '../actions/dashboardState';
|
import { setDirectPathToChild, setMountedTab } from '../actions/dashboardState';
|
||||||
import { logEvent } from '../../logger/actions';
|
|
||||||
import { addDangerToast } from '../../messageToasts/actions';
|
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
component: componentShape.isRequired,
|
component: componentShape.isRequired,
|
||||||
|
|
@ -48,6 +48,7 @@ const propTypes = {
|
||||||
directPathToChild: PropTypes.arrayOf(PropTypes.string),
|
directPathToChild: PropTypes.arrayOf(PropTypes.string),
|
||||||
directPathLastUpdated: PropTypes.number,
|
directPathLastUpdated: PropTypes.number,
|
||||||
dashboardId: PropTypes.number.isRequired,
|
dashboardId: PropTypes.number.isRequired,
|
||||||
|
isComponentVisible: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ const propTypes = {
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
onStop: () => {},
|
onStop: () => {},
|
||||||
onSave: () => {},
|
onSave: () => {},
|
||||||
disabled: false,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Prolly need to move this to a global context
|
// Prolly need to move this to a global context
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,8 @@ const propTypes = {
|
||||||
choices: PropTypes.oneOfType([
|
choices: PropTypes.oneOfType([
|
||||||
PropTypes.arrayOf(PropTypes.array),
|
PropTypes.arrayOf(PropTypes.array),
|
||||||
PropTypes.func,
|
PropTypes.func,
|
||||||
]).isRequired,
|
]),
|
||||||
schemes: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired,
|
schemes: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),
|
||||||
isLinear: PropTypes.bool,
|
isLinear: PropTypes.bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ export const DEFAULT_VIEWPORT = {
|
||||||
const PARAMS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
|
const PARAMS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
|
||||||
|
|
||||||
const propTypes = {
|
const propTypes = {
|
||||||
onChange: PropTypes.func.isRequired,
|
onChange: PropTypes.func,
|
||||||
value: PropTypes.shape({
|
value: PropTypes.shape({
|
||||||
longitude: PropTypes.number,
|
longitude: PropTypes.number,
|
||||||
latitude: PropTypes.number,
|
latitude: PropTypes.number,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue