diff --git a/superset-frontend/spec/javascripts/utils/common_spec.jsx b/superset-frontend/spec/javascripts/utils/common_spec.jsx index 80f4fbc0bdd..08c0097721e 100644 --- a/superset-frontend/spec/javascripts/utils/common_spec.jsx +++ b/superset-frontend/spec/javascripts/utils/common_spec.jsx @@ -17,6 +17,7 @@ * under the License. */ import { + applyFormattingToTabularData, optionFromValue, prepareCopyToClipboardTabularData, NULL_STRING, @@ -57,4 +58,28 @@ describe('utils/common', () => { ); }); }); + describe('applyFormattingToTabularData', () => { + it('does not mutate empty array', () => { + const data = []; + expect(applyFormattingToTabularData(data)).toEqual(data); + }); + it('does not mutate array without temporal column', () => { + const data = [ + { column1: 'lorem', column2: 'ipsum' }, + { column1: 'dolor', column2: 'sit', column3: 'amet' }, + ]; + expect(applyFormattingToTabularData(data)).toEqual(data); + }); + it('changes formatting of temporal column', () => { + const originalData = [ + { __timestamp: 1594285437771, column1: 'lorem' }, + { __timestamp: 1594285441675, column1: 'ipsum' }, + ]; + const expectedData = [ + { __timestamp: '2020-07-09 09:03:57', column1: 'lorem' }, + { __timestamp: '2020-07-09 09:04:01', column1: 'ipsum' }, + ]; + expect(applyFormattingToTabularData(originalData)).toEqual(expectedData); + }); + }); }); diff --git a/superset-frontend/src/explore/components/DisplayQueryButton.jsx b/superset-frontend/src/explore/components/DisplayQueryButton.jsx index 112cb431bb5..9dac5bdc753 100644 --- a/superset-frontend/src/explore/components/DisplayQueryButton.jsx +++ b/superset-frontend/src/explore/components/DisplayQueryButton.jsx @@ -37,7 +37,6 @@ import { } from 'react-bootstrap'; import { Table } from 'reactable-arc'; import { t } from '@superset-ui/translation'; -import { SupersetClient } from '@superset-ui/connection'; import getClientErrorObject from '../../utils/getClientErrorObject'; import CopyToClipboard from './../../components/CopyToClipboard'; @@ -47,7 +46,10 @@ import Loading from '../../components/Loading'; import ModalTrigger from './../../components/ModalTrigger'; import Button from '../../components/Button'; import RowCountLabel from './RowCountLabel'; -import { prepareCopyToClipboardTabularData } from '../../utils/common'; +import { + applyFormattingToTabularData, + prepareCopyToClipboardTabularData, +} from '../../utils/common'; import PropertiesModal from './PropertiesModal'; import { sliceUpdated } from '../actions/exploreActions'; @@ -197,7 +199,7 @@ export class DisplayQueryButton extends React.PureComponent { ({ + ...row, + // eslint-disable-next-line no-underscore-dangle + __timestamp: DATETIME_FORMATTER(new Date(row.__timestamp)), + })); +}